【发布时间】:2014-07-19 16:54:48
【问题描述】:
出现以下问题是因为我试图将 bytes 字符串用作字典键,而我理解为相等的字节值没有被视为相等。
为什么以下 python 代码比较不相等 - 这两个等效表示不是相同的二进制数据(故意选择避免字节序的示例)?
b'0b11111111' == b'0xff'
我知道以下计算结果为真,证明了等价性:
int(b'0b11111111', 2) == int(b'0xff', 16)
但为什么 python 强迫我知道表示?它与字节序有关吗?有没有一些简单的方法可以强制这些比较等效,而不是将它们全部转换为例如十六进制文字?任何人都可以建议一种透明且清晰的方法,以(某种程度上)独立于平台的方式在所有表示之间移动(或者我要求太多了)?
编辑:
鉴于下面的 cmets,假设我想以 b'0b11111111' 的形式使用 8 位实际索引一个字典,那么为什么 python 将其扩展为 10 个字节,我该如何防止呢?
这是大型树数据结构的一小部分,将我的索引扩展 80 倍似乎是对内存的巨大浪费。
【问题讨论】:
标签: python comparison byte endianness base