混淆二进制字符串中的位数 (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
我有一个二进制字符串 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