混淆二进制字符串中的位数 (Python)

Confusion on number of bits in binary string (Python)

我有一个二进制字符串 b'\xa8LeW',我试图通过执行以下操作查看 'actual' 二进制字符串(例如,只有 1 和 0):

bin(int.from_bytes(b'\xa8LeW', byteorder=sys.byteorder)) 结果是 0b1010111011001010100110010101000。按照我的理解,0b是一个前缀,表示它是二进制的,剩下的就是二进制串。但是无论我数多少次,我只看到 0b 之后的 31 位,然而,len(b'\xa8LeW') 产生 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检查位长:

Return the number of bits necessary to represent an integer in binary, excluding the sign and leading zeros:

>>> n = -37
>>> bin(n)
'-0b100101'
>>> n.bit_length()
6
>>> x.bit_length()
31