3

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

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

但我得到一个错误:

TypeError: 'str' does not support the buffer interface

请问有什么想法吗?

4

1 回答 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')
于 2012-12-20T09:50:07.600 回答