【发布时间】:2021-11-05 09:41:54
【问题描述】:
我有一个二进制字符串 b'\xa8LeW',我试图通过执行以下操作来查看“实际”二进制字符串(例如,只有 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 计算我期望的位数,但是当我查看字符串时,我似乎缺少一个?
【问题讨论】:
-
不显示前导零位。
-
0b0101 == 0b101 -
不知道,谢谢
-
请注意,
x.count("0")正在计算0b中的额外 0,以抵消差异。 -
您可以始终按照您想要的方式格式化输出:
x=int.from_bytes(b'\xa8LeW', byteorder=sys.byteorder)然后s = f'{x:032b}'将显示前导零