byterarray()的append()方法不允许我追加32到126之间的任何数字.什么东西



我遇到了一个内置Python3.8对象的非常奇怪的问题,我不知道如何解决这个问题。

我能够将脚本中的问题隔离到bytearray()的append方法中。如果我试图将32126之间的任何值附加到我的bytearray,而不是附加十六进制,它会附加一些其他看似任意的字符。它没有将32追加为x20,将126分别追加为x7e,而是将~追加。

如果我指定要附加的十六进制作为实际十六进制,而不是使用int,它仍然会表现出这种行为。我只是碰巧在过去的三到四个小时里使用了这个函数,并以某种方式避免了包含32-126之间任何字节值的测试用例。

您看到的只是Python默认显示字节字符串的方式。当字节表示可打印的ASCII字符(32-126(时,字节字符串显示为ASCII。不可打印的字节显示为xnn,其中nn是字节的十六进制值。

还有其他方法可以访问具有不同默认显示方法的字节:

>>> b=bytearray()
>>> b.append(32)  # 32 is the ASCII code for a space.
>>> b
bytearray(b' ')
>>> b.append(48)  # 48 is the ASCII code for a zero.
>>> b
bytearray(b' 0')
>>> b.append(1)   # 1 is an unprintable ASCII code.
>>> b
bytearray(b' 0x01')
>>> b.hex()       # display the 3-byte array as only hexadecimal codes
'203001'
>>> b[0]          # display the individual bytes in decimal
32
>>> b[1]
48
>>> b[2]
1
>>> list(b)
[32, 48, 1]

如果您想要不同于默认值的显示,请编写一个函数并自定义它。例如,这与bytearray的现有默认值类似,但将所有字节打印为xnn转义码:

>>> def display(b):
...   return "bytearray(b'" + ''.join([f'\x{n:02x}' for n in b]) + "')"
...
>>> print(display(b))
bytearray(b'x20x30x01')

最新更新