Python'list'自动将十六进制值转换为十进制

时间:2013-10-09 19:06:18

标签: python python-3.x

我最近开始学习Python并且有很多困惑,

我有两个输入bytearrays

x = bytearray(b'\xac\xe0\x1f\x15n\x99\xf1\xce\xba\xba\x8d\x9a\xda-JG')
y = bytearray(b'\x9d\x93\xcd\x0f(\xa8\xd6\xa9\xea\x10\x8d_\xbd7\xc6Y')

当我打印它们时,

print(x)
print(y)

它提供完全相同的输出。

我现在想要zip这两个变量,xy

由于我们使用list来查看Python 3中zip的内容,

我使用了以下代码,

print( list(zip(x,y)) )

这是输出,

[(172, 157), (224, 147), (31, 205), (21, 15), (110, 40), (153, 168), (241, 214),
 (206, 169), (186, 234), (186, 16), (141, 141), (154, 95), (218, 189), (45, 55),
 (74, 198), (71, 89)]

我不明白为什么它被转换为十进制值?

1 个答案:

答案 0 :(得分:3)

它不是“转换为十进制值”。 bytearray是一个字节列表。字节是数字。数字可以在任何基础上表示而不会改变它们的值。所以数字保持不变;只有他们的代表变化。原因是bytearray以十六进制表示其内容,而tuple包含单个int s,其具有默认的十进制表示。这仅适用于打印时;例如,以下内容已经为真。

assert x[0] == 172

数字通过zip之后,换句话说,它们不再是bytearray的一部分,Python不再有任何方法可以知道它应该以十六进制打印。