python - 混淆二进制字符串中的位数(Python)
问题描述
我有一个二进制字符串b'\xa8LeW'
,我试图通过执行以下操作来查看“实际”二进制字符串(例如,只有 1 和 0):
bin(int.from_bytes(b'\xa8LeW', byteorder=sys.byteorder))
这产生了0b1010111011001010100110010101000
。据我了解,0b
是一个前缀表示它是二进制的,其余的是二进制字符串。但是,无论我计算多少次,我只看到31位之后0b
,但是,len(b'\xa8LeW')
yield 4
,意思是 32 位,并且
x = bin(int.from_bytes(b'\xa8LeW', byteorder=sys.byteorder))
x.count("0") + x.count("1")
产生32
位。这是字符串再次分成字节,除了最后 7 位:
0b 10101110 11001010 10011001 0101000
我期待 4 个字节,那么为什么 python 计算我期望的位数,但是当我查看字符串时,我似乎缺少一个?
解决方案
就像评论中提到的那样,前导零被跳过并且它们不会改变值:
>>> 0b1
1
>>> 0b01
1
>>> 0b0000001
1
您可以格式化输出以添加它们:
>>> x = int.from_bytes(b'\xa8LeW', byteorder=sys.byteorder)
>>> f"{x:032b}"
'01010111011001010100110010101000'
还有用于检查位长度的int.bit_length方法:int
返回以二进制表示整数所需的位数,不包括符号和前导零:
>>> n = -37 >>> bin(n) '-0b100101' >>> n.bit_length() 6
>>> x.bit_length()
31
推荐阅读
- keras - 训练后如何计算 BiGAN 鉴别器损失
- flutter - Flutter 无法更新动态 TextEditingController 文本
- python - ValueError:Series.replace 不能使用 dict-value 和 non-None to_replace
- laravel - Laravel:更新数据时在 null 上调用成员函数 getClientOriginalName()
- javascript - 在 Next.js 中连接到 Google 电子表格时出错
- css - 如何修改 CSS 文本动画
- linux - 如何查看我在 linux 共享虚拟主机中可用和使用的配额大小?如果我无权访问“配额”命令
- python - 我的 python Minecraft 副本有问题
- mysql - 如何使用 where 条件计算值,我们可以根据其他表日期放置开始日期和结束日期
- python - 如何让docker容器连续运行?