为什么Python中的bytearray函数将一个字节转换为两个字节?

2024-09-30 04:38:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python创建一个数据编码器。我使用自己独特的底层对称算法将一个8位字节编码为另一个8位字节,然后使用相同的算法对其进行解码

我正在使用Python的bytearray函数将字符串转换为字节。但是我遇到了这个问题:十六进制xAB可以用二进制表示为10101011。然而,当我在字符串表示法(“\xAB”)上使用字节数组时,我得到:

>>> byte = bytearray("\xAB", "utf-8")
>>> print(byte)
bytearray(b'\xc2\xab')

很明显,字符串是在\xAB的单个字节中表示的,但是为什么另一个字节\xC2被放在字节数组的前面呢?我使用UTF-8对数据进行编码,因为这是Python的默认值,但是我应该使用不同的编码吗?如何使bytearray只包含表示xAB所需的8位字节


Tags: 数据函数字符串算法编码字节二进制数组
2条回答

错误字节似乎来自字符串中的转义字符。从字符串到字节编码时,我建议使用python的新符号:

>> byte = bytearray(b"xAB")
>> print(byte)
bytearray(b'xAB')

同时,为了调试代码,考虑反转编码以查看Python所看到的(显然不是正确的值)

>>> byte = bytearray("\xAB", "utf-8")
>>> byte.decode()
'«'

使用上面提供的更改,将返回正确的值:

>>> byte = bytearray(b'xAB')
>>> byte.decode()
'xAB'

"\xAB"是由单个Unicode字符U+00AB组成的字符串。然后使用UTF-8编码将其转换为字节数组。但在UTF-8中,字符U+00AB被编码为两个字节-C2,AB。在这种情况下,第二个字节恰好与输入字节相同是一种巧合;情况并非总是如此

如果要处理字节数组,最好不要使用字符串,因为字符串总是会带来编码方面的麻烦

相关问题 更多 >

    热门问题