从字符串中获取字符的十六进制值

3

我目前在我的方法中使用字符串作为参数, 我想提取索引为I的字符并获取其十六进制值。 目前我正在做:

temp = string[i]
binascii.hexlify(temp);

但是我遇到一个错误:
TypeError: 'str' does not support the buffer interface

有任何想法吗?
1个回答

3

您需要将字符串编码为字节:

binascii.hexlify(temp.encode('ascii'));

您需要选择一个合适的编码方式,这个编码方式能够正确地表示您的文本;在此我假设您的 Unicode 字符范围为 0-127。

如果您使用不同的编码方式进行编码,结果将是该编码方式的十六进制表示。例如,UTF-8 每个字符将使用 1 到 6 个字节。

或者,您可以使用 ord() 函数 并将结果格式化为十六进制:

format(ord(temp), 'x')

它可以与任何Unicode字符一起使用。它将使用十六进制表示法的Unicode代码点,因此介于1到4个字节之间(后者用于\Uabcdefgh宽字符)。根据您的最大字符宽度,您可能需要填充字节以防止模棱两可的代码点;比如说您需要编码到代码点\uffff,那么您需要为每个代码点使用2个字节,或4个十六进制字符:

format(ord(temp), '04x')

实际上,ASCII字符落在0-127范围内。 - kmkaplan
@kmkaplan:我并没有说 ASCII 在 0-255 范围内,我只是认为他的数据在那个范围内 :-P 但你说得对,字节值在 128-255 的数无法编码为 ASCII。 - Martijn Pieters
做得好!谢谢!! - SagiLow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接