3
我目前得到一个字符串作为我的方法中的参数, 我想提取I索引中的字符并获取它的十六进制值。 目前我做:从字符串获得字符的十六进制值
temp = string[i]
binascii.hexlify(temp);
,但我得到一个错误:
TypeError: 'str' does not support the buffer interface
任何想法吗?
我目前得到一个字符串作为我的方法中的参数, 我想提取I索引中的字符并获取它的十六进制值。 目前我做:从字符串获得字符的十六进制值
temp = string[i]
binascii.hexlify(temp);
,但我得到一个错误:
TypeError: 'str' does not support the buffer interface
任何想法吗?
您需要将字符串编码为字节:
binascii.hexlify(temp.encode('ascii'));
你需要选择一个合适的编码,一个可以适当代表你的文字;我假设你的Unicode字符在这里落在0-127范围内。
如果您编码为不同的编码,结果将是该编码的十六进制表示。例如,UTF-8将使用每个字符1到6个字节。
或者,你可以使用ord()
function和格式化结果为十六进制:
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。 –
这是做这项工作。谢谢 !! – SagiLow