出现了以下问题,因为我试图将bytes字符串用作字典键,而我理解为相等的字节值并未被视为相等.
为什么下面的python代码没有比较相同 - 不是这两个相同二进制数据的等价表示(为避免endianess而故意选择的例子)?
b'0b11111111' == b'0xff'
Run Code Online (Sandbox Code Playgroud)
我知道以下评估为真,证明了等价:
int(b'0b11111111', 2) == int(b'0xff', 16)
Run Code Online (Sandbox Code Playgroud)
但是为什么python强迫我知道代表?它与endian-ness有关吗?除了将它们全部转换为例如十六进制文字之外,还有一些简单的方法可以强制它们进行比较吗?任何人都可以建议一种透明而清晰的方法,以某种(某种程度上)平台无关的方式在所有表示之间移动(或者我要求的太多)?
编辑:
鉴于下面的评论,假设我想在表单中使用8位实际索引字典b'0b11111111',那么为什么python将其扩展为10个字节,我该如何防止这种情况?
这是一个较小的大型树数据结构,将我的索引扩展80倍似乎是对内存的巨大浪费.