2017-05-04 43 views
1

我想用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] 
+0

所以..什么将是位'8'例如?第二个字节的MSB?它的LSB? –

+0

您是否尝试过类似'''.join(f'{byte:b}')的字节?'? – vaultah

回答

2

,将工作:

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)] 
0

嗯,对没有内置位输入Python,但你可以这样做

>>> bin(int.from_bytes(b"hello world", byteorder="big")).strip('0b') 
'1101000011001010110110001101100011011110010000001110111011011110111001001101100011001' 
+0

你的答案如何处理大字节数组? – vaultah

+0

在这种特殊情况下,有效载荷似乎并不大。 –