2014-12-01 2 views
1

저는 파이썬에서 새롭습니다. 이 결과를 가지고 모든 이들의 각 1에파이썬에서 bytearrays를 어떻게 추가 할 수 있습니까?

a=bytearray('\x31\xcb\x50\x69'). 

내가 뭘해야 할 것은 : 나는 쉘 코드의 ByteArray의이 내가 년을 달성 할 수있는 방법

bytearray('\x32\xcc\x51\x6a'). 

어떤 좋은 아이디어 파이썬?

, 당신과 안부 감사

+2

바이트 중 하나가 '0xff'이면 어떻게 될까요? – kindall

+0

음, 절차는 되돌릴 수 있어야합니다. 그래서 랩 어라운드가 필요합니다. 역전 시키면 0xff로 돌아갈 수 있습니다. –

답변

2
a = bytearray('\x31\xcb\x50\x69') 
a = bytearray(b + 1 if b < 255 else 0 for b in a) 

변경 0 당신이 제로로 다시 돌아 wrappping보다는 값을 클립하려면 255합니다.

+0

이 결과는 다음과 같습니다. "2 Qj" 왜 이런 일이 발생 했습니까? –

+0

이들은 바이트 배열의 문자로 해석되는 바이트입니다. 원래의 가치를 시험 해보면 비슷한 결과를 얻을 수 있습니다. – kindall

3
>>> a=bytearray('\x31\xcb\x50\x69') 
>>> a 
bytearray(b'1\xcbPi') # repr uses a different but equivalent representation 
>>> bytearray(x + 1 for x in a) 
bytearray(b'2\xccQj') 
당신은 그것을 예를 들어 0xff

에 하나에 의미를 고려할 필요가

bytearray((x + 1) % 0xff for x in a) # wrap around 

또는

bytearray(min(x + 1), 0xff) for x in a) # limit to 0xff 

그것은 경우 translate 방법을 사용하는 것이 아마 더 빠릅니다 당신은 이들 중 몇 가지를하고 있습니다

>>> trans_table = bytearray(range(1, 256)) + '\x00' 
>>> a.translate(trans_table) 
bytearray(b'2\xccQj') 

당신이 같이 할 수있는 배열을 인쇄하려면은 repr() 기능을 사용

>>> print a 
1�Pi 
>>> print repr(a) 
bytearray(b'1\xcbPi') 
+0

'번역'을위한 만세. – kindall

+0

답변 해 주셔서 감사합니다. 내가 뭘 잘못했는지 모르겠습니다. 나는 모든 솔루션 제공 업체를 시도했는데 그들 모두 이상한 결과를 냈습니다 : 1 P 또는 2 Q ....? –

+0

@Dionka, 콘솔을 인쇄 할 때 bytearray를 나타내는 방법입니다. 'print'는 bytearray에'__str__'을 호출합니다. 'repr'을 사용하면 여기에 표시된 표현을 얻을 수 있습니다. –

0
다음과 같이 할 수

:

a=bytearray('\x31\xcb\x50\x69') 
new_a = bytearray(b + 1 for b in a) 


for b in new_a: 
    print('{:02x}'.format(b)) 

출력 :

32 
cc 
51 
6a 
관련 문제