파이썬에서 바이트 배열 (예 : byte []를 사용하는 Java)을 어떻게 나타낼 수 있습니까? gevent를 사용하여 유선으로 보내야합니다.
byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00};
답변:
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'
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
(또는 bytes
Python 3에서) 필요한 경우 다음과 같이 간단합니다.
>>> bytes(key)
'\x13\xff\x00\x00\x08\x00'
fubar = str(key); print(len(key), len(fubar))
생성합니다 6 38
. 어쨌든 (1) "문자열"은 매우 모호한 용어입니다. (2) 만약 그가 변경 성을 원한다면, 그는 그의 원래 목록
str
다르게 작업하는 것에 대한 좋은 점 bytearray
-수정되었습니다. 나는 주로 그것을 구별하기 위해 가변성을 언급 bytes
했지만, 요점은 또한 데이터를 아예 포함하는 중간 단계가 필요하지 않다는 list
것입니다.
struct.pack("<IH", 19, 8)
...
출력을 쉽게 기록 할 수있는 추가 이점도있는 대안 :
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)
Dietrich의 대답은 아마도 당신이 설명하고 바이트를 보내는 데 필요한 것일 수 있지만 예를 들어 제공 한 코드와 더 가까운 아날로그는 bytearray
유형을 사용하는 것 입니다.
>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> bytes(key)
b'\x13\x00\x00\x00\x08\x00'
>>>
bytearray
원하는 경우 바이트 배열을 사용할 수있는 방법입니다.
bytearray('b', ...)
이 작동하지 않는다고 언급합니다 (2) . 아니면 그냥 삭제할 수도 있습니다.
base64.b16decode(x)
사용할 수 있습니다x.decode("hex")
. 최소한 가져 오기를 한 번만 줄여도됩니다. :)