我想用Python和scapy解析一些数据。因此我必须分析单个比特。但此刻我与像一些有效载荷excample UDP数据包:Python字节数组到位数组
bytes = b'\x18\x00\x03\x61\xFF\xFF\x00\x05\x42\xFF\xFF\xFF\xFF'
是否有任何优雅的方式转换为字节,这样我可以访问如单位:
bytes_as_bits = convert(bytes)
bit_at_index_42 = bytes_as_bits[42]
我想用Python和scapy解析一些数据。因此我必须分析单个比特。但此刻我与像一些有效载荷excample UDP数据包:Python字节数组到位数组
bytes = b'\x18\x00\x03\x61\xFF\xFF\x00\x05\x42\xFF\xFF\xFF\xFF'
是否有任何优雅的方式转换为字节,这样我可以访问如单位:
bytes_as_bits = convert(bytes)
bit_at_index_42 = bytes_as_bits[42]
,将工作:
def access_bit(data, num):
base = int(num/8)
shift = num % 8
return (data[base] & (1<<shift)) >> shift
如果你想创建一个二进制数组,你可以使用它像这样:
[access_bit(data,i) for i in range(len(data)*8)]
嗯,对没有内置位输入Python,但你可以这样做
>>> bin(int.from_bytes(b"hello world", byteorder="big")).strip('0b')
'1101000011001010110110001101100011011110010000001110111011011110111001001101100011001'
你的答案如何处理大字节数组? – vaultah
在这种特殊情况下,有效载荷似乎并不大。 –
所以..什么将是位'8'例如?第二个字节的MSB?它的LSB? –
您是否尝试过类似'''.join(f'{byte:b}')的字节?'? – vaultah