파이썬의 바이트 배열


80

파이썬에서 바이트 배열 (예 : byte []를 사용하는 Java)을 어떻게 나타낼 수 있습니까? gevent를 사용하여 유선으로 보내야합니다.

byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00};

답변:


82

Python 3에서는 Python 2 bytes라고도 하는 객체를 사용합니다 str.

# Python 3
key = bytes([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])

# Python 2
key = ''.join(chr(x) for x in [0x13, 0x00, 0x00, 0x00, 0x08, 0x00])

base64모듈 을 사용하는 것이 더 편리하다고 생각 합니다 ...

# Python 3
key = base64.b16decode(b'130000000800')

# Python 2
key = base64.b16decode('130000000800')

리터럴을 사용할 수도 있습니다 ...

# Python 3
key = b'\x13\0\0\0\x08\0'

# Python 2
key = '\x13\0\0\0\x08\0'

9
기록을 위해 대신을 base64.b16decode(x)사용할 수 있습니다 x.decode("hex"). 최소한 가져 오기를 한 번만 줄여도됩니다. :)
Dolda2000

34

bytearray가변 바이트 시퀀스를 나타내는 (Python 2.6 이상)을 사용하십시오.

>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> key
bytearray(b'\x13\x00\x00\x00\x08\x00')

인덱싱은 개별 바이트를 가져오고 설정합니다.

>>> key[0]
19
>>> key[1]=0xff
>>> key
bytearray(b'\x13\xff\x00\x00\x08\x00')

str(또는 bytesPython 3에서) 필요한 경우 다음과 같이 간단합니다.

>>> bytes(key)
'\x13\xff\x00\x00\x08\x00'

3.x에서는 그렇게 간단하지 않습니다. fubar = str(key); print(len(key), len(fubar))생성합니다 6 38. 어쨌든 (1) "문자열"은 매우 모호한 용어입니다. (2) 만약 그가 변경 성을 원한다면, 그는 그의 원래 목록
John Machin

@John : Python 3에서 str다르게 작업하는 것에 대한 좋은 점 bytearray-수정되었습니다. 나는 주로 그것을 구별하기 위해 가변성을 언급 bytes했지만, 요점은 또한 데이터를 아예 포함하는 중간 단계가 필요하지 않다는 list것입니다.
스콧 그리피스

2
그것은 무엇 영업 이익이 정말로 필요로하는 것은 같은 것을 공정한 기회입니다 struct.pack("<IH", 19, 8)...
존 머신

5

출력을 쉽게 기록 할 수있는 추가 이점도있는 대안 :

hexs = "13 00 00 00 08 00"
logging.debug(hexs)
key = bytearray.fromhex(hexs)

다음과 같이 쉽게 대체 할 수 있습니다.

hexs = "13 00 00 00 08 {:02X}".format(someByte)
logging.debug(hexs)
key = bytearray.fromhex(hexs)

3

Dietrich의 대답은 아마도 당신이 설명하고 바이트를 보내는 데 필요한 것일 수 있지만 예를 들어 제공 한 코드와 더 가까운 아날로그는 bytearray유형을 사용하는 것 입니다.

>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> bytes(key)
b'\x13\x00\x00\x00\x08\x00'
>>> 

1
Python 2.5 또는 이전 버전에서는 좋지만 기본 제공은 bytearray원하는 경우 바이트 배열을 사용할 수있는 방법입니다.
Scott Griffiths

@TokenMacGuy : 귀하의 답변에는 2 개의 추가 편집이 필요합니다. (1) 배열 모듈 bytearray('b', ...)이 작동하지 않는다고 언급합니다 (2) . 아니면 그냥 삭제할 수도 있습니다.
John Machin 2011 년

2
@John : 감사합니다. 앞으로는 바로 가서 직접 수정하세요.
SingleNegationElimination 2011 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.