Python中的字节数组

d0c*_*tor 73 python byte gevent

我怎样才能在Python中表示一个字节数组(比如带有byte []的Java)?我需要用gevent通过电线发送它.

byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00};
Run Code Online (Sandbox Code Playgroud)

Die*_*Epp 72

在Python 3中,我们使用bytes对象,也称为strPython 2.

# 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])
Run Code Online (Sandbox Code Playgroud)

我觉得使用base64模块更方便......

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

# Python 2
key = base64.b16decode('130000000800')
Run Code Online (Sandbox Code Playgroud)

你也可以使用文字......

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

# Python 2
key = '\x13\0\0\0\x08\0'
Run Code Online (Sandbox Code Playgroud)

  • 对于记录,而不是`base64.b16decode(x)`,你可以简单地使用`x.decode("hex")`.至少可以让你少用一次进口.:) (7认同)

Sco*_*ths 30

只需使用bytearray代表可变字节序列的(Python 2.6及更高版本)

>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> key
bytearray(b'\x13\x00\x00\x00\x08\x00')
Run Code Online (Sandbox Code Playgroud)

索引获取并设置各个字节

>>> key[0]
19
>>> key[1]=0xff
>>> key
bytearray(b'\x13\xff\x00\x00\x08\x00')
Run Code Online (Sandbox Code Playgroud)

如果你需要它str(或bytes在Python 3中),它就像它一样简单

>>> bytes(key)
'\x13\xff\x00\x00\x08\x00'
Run Code Online (Sandbox Code Playgroud)

  • OP真正需要的是一个很好的机会,比如`struct.pack("<IH",19,8)`... (2认同)

Tom*_*ber 6

另一种选择还具有轻松记录其输出的额外好处:

hexs = "13 00 00 00 08 00"
logging.debug(hexs)
key = bytearray.fromhex(hexs)
Run Code Online (Sandbox Code Playgroud)

允许你做这样简单的替换:

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