为啥十六进制的 5D 表示为 bytearray(b']')?
Posted
技术标签:
【中文标题】为啥十六进制的 5D 表示为 bytearray(b\']\')?【英文标题】:Why is 5D in hex represented as bytearray(b']')?为什么十六进制的 5D 表示为 bytearray(b']')? 【发布时间】:2022-01-09 02:38:59 【问题描述】:例如,如果你在一个字节数组中表示 5D,你会得到bytearray(b']')
,但我不明白为什么。
是不是因为 ASCII,如果是,Python 是如何处理所有 ASCII 字符的?
【问题讨论】:
5D hex 是 93 十进制,这是]
的 ascii 代码。这就是 bytearray 显示易于打印的字符的方式。
python2 还是 python3?结果不一样。
在每个中尝试b']' == chr(0x5d)
。
这是因为 x5d 是 ASCII 中的 ] 字符,Python 在显示字节数组的内容时经常会做一件烦人的事情,如果你想要所有十六进制,请使用类似 ','.join(f'\\xb:02x' for b in ba)
的东西。
【参考方案1】:
在底层都是二进制的,对吧?
十六进制的5d
只是二进制的01011101
。事实证明,ascii 中的 ]
在二进制 01011101
中是相同的。所以实际上你只有 01011101
或 base10 中的 93
以 Hex 和 Ascii 表示。
【讨论】:
所以 Python 只是在使用 Ascii 来节省打印时的内存? 与内存无关,因为一个字节就是一个字节。它只是使用 ascii 作为字节的表示。它也可以只使用十六进制(或二进制或十进制或 base29),但无论出于何种原因,他们决定使用 ascii。我相信您可以使用 bytearray 的.hex()
方法将其显示为十六进制,如果您愿意的话。以上是关于为啥十六进制的 5D 表示为 bytearray(b']')?的主要内容,如果未能解决你的问题,请参考以下文章
[ActionScript 3.0] 记录几个ByteArray 十六进制 String等相互转换的方法