2012-12-20 46 views
3

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

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

,但我得到一个错误:

TypeError: 'str' does not support the buffer interface 

任何想法吗?

回答

3

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

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') 
+0

其实ASCII字符落在0-127范围内。 – kmkaplan

+0

@kmkaplan:我没有说ASCII是在0-255范围内,我说我推测他的数据在该范围内:-P但是你是正确的,字节值128-255不会编码为ASCII。 –

+0

这是做这项工作。谢谢 !! – SagiLow

相关问题