Python二进制字符串位数疑惑:4字节数据bin()返回结果仅见31位?
问题原因
bin()函数的设计逻辑是仅输出表示整数所需的最少二进制位数,会自动省略整数最高位的前导零,不会保留原始字节序列的位宽信息。
你遇到的现象本质是:你用的是小端字节序(sys.byteorder为little),4字节b'\xa8LeW'转整数后,32位表示的最高位是0,bin()输出时直接删掉了这个前导零,所以你看到的0b后只有31位。- 关于你提到的计数结果为32的矛盾:实际是计数逻辑有误,你可以手动数一遍
0b1010111011001010100110010101000里的0和1总和,实际为31,大概率是计数时不小心把前缀的b或者其他字符算进去了。
正确获取固定32位二进制串的方法
不要用 bin() 直接输出,改用字符串格式化补全前导零即可:
import sys val = int.from_bytes(b'\xa8LeW', byteorder=sys.byteorder) # 032b表示输出32位二进制,不足位补前导零 bin_str = format(val, '032b') print(bin_str)
输出结果会自动补全最高位的前导零,得到完整32位二进制串,按字节拆分后和原始4字节完全对应。
内容的提问来源于stack exchange,提问作者figbar
相关产品推荐
相关产品推荐

