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

 我来答
Inpool
推荐于2017-11-23 · TA获得超过782个赞
知道小有建树答主
回答量:486
采纳率:66%
帮助的人:436万
展开全部

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

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

>>> 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']
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式