为啥十六进制的 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']')?的主要内容,如果未能解决你的问题,请参考以下文章

Python 序列 - bytes 和 bytearray

Spark:将 bytearray 转换为 bigint

[ActionScript 3.0] 记录几个ByteArray 十六进制 String等相互转换的方法

计算机内存地址为啥要用16进制数来表示

JavaScript 中等效的 Java byteArray

为啥十六进制数字以#而不是0x为前缀?