我想将字节字符串的第一个字节连接到字符串的末尾:
a = b'\x14\xf6'
a += a[0]
我得到一个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't concat bytes to int
当我键入 bytes(a[0])
我得到:
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
并且 bytes({a[0]})
给出了正确的 b'\x14'
。
为什么我需要 {}
?
原文由 Alexandre AMORTILA 发布,翻译遵循 CC BY-SA 4.0 许可协议
字节不像字符串那样工作。当您使用单个值(而不是切片)进行索引时,您会得到一个整数,而不是长度为一的
bytes
实例。在你的情况下,a[0]
是20
(十六进制0x14
)。bytes
构造函数也会发生类似的问题。如果你传递一个整数作为参数(而不是一个可迭代的),你会得到一个bytes
包含那么多空字节的实例("\x00"
)。这解释了为什么bytes(a[0])
给你二十个空字节。带有大括号的版本有效,因为它创建了一个集合(可迭代)。做你想做的,我建议切片
a[0:1]
而不是用单个值索引。这将为您提供一个bytes
实例,您可以将其连接到现有值上。