求助:python如何按位解析二进制数据

Python010

求助:python如何按位解析二进制数据,第1张

可以的,二进制是计算机内的表示方法,处理二进制数据是最基本的能力。

如果是二进制字符串转十进制:

>>> x = '10101010'

>>> int(x, 2)

170

如果是从文件或网络中获取的数据,要知道某一位是0还是1的话,获取的数据可以按字符读取,由于一个字符由8位二进制表示,分别读取1到8位的二进制值就可以了:

>>> get_char_bit = lambda char, n: (char >> (8-n)) & 1 # 从高到低分别为第1~8位

>>> data = b'ab' # 在python3中字符串默认是unicode,所以加上b前缀兼容

>>> # 在python3中按字符读取byte字符串是数字,而python2读出来的却是字符,但bytearray是一致的都是数字

>>> data = bytearray(data)

>>> result = []

>>> for char in data:

        for i in range(1, 9):

            result.append(get_char_bit(char, i)) 

>>> result

[0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0]

还有一种比较简单的方法是使用内置的bin函数

>>> data = bytearray(b'ab')

>>> result = []

>>> for char in data:

        result.extend(bin(char)[2:].rjust(8, '0'))

        

>>> result

['0', '1', '1', '0', '0', '0', '0', '1', '0', '1', '1', '0', '0', '0', '1', '0']

JS的按位的结果是有符号整数, 而Py的是无符号整数

你可以通过

JS

x = 4023233417

y = 2562383102

r1 = (x &y) >>>0

来迫使一个有符号整数转为无符号的