我想用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