Python字符串转换为十六进制

时间:2015-03-26 09:35:48

标签: python string hex

我有一些python代码,我设法拼凑起来实现我所需要的,但对于python来说还是一个新手我相信应该有一个比我在这里更优雅的解决方案。

基本上我需要取一个任意字符串(MAGICSTRING)并将其中的每个字符转换为十六进制值,然后将0x00填充到结果十六进制字符串的开头和结尾,最后放入十六进制值最后整个填充字符串的长度。然后我需要这些转义,以便稍后可以传递给套接字连接。

在示例中,MAGICSTRING为1234,“值”的预期结果为'\x00\x31\x32\x33\x34\x00\x06'

见下面的例子。

MAGICSTRING = '1234'
i=0
hexpass = ''
while i < len(MAGICSTRING):
    hexpass = hexpass + hex(ord(MAGICSTRING[i]))[2:]
    i += 1
strlen = len(MAGICSTRING) + 2
sendstr = '00'+ hexpass + '00' + '0' + hex(strlen)[2:]
value = sendstr.decode('hex')

欣赏可以对上述内容进行的任何改进。

1 个答案:

答案 0 :(得分:5)

字符串'1234' 已经等同于'\x31\x32\x33\x34'

>>> '\x31\x32\x33\x34'
'1234'
>>> '\x31\x32\x33\x34' == '1234'
True

因此将其编码为十六进制然后再解码它是...繁忙的工作:

>>> '1234'.encode('hex').decode('hex')
'1234'

\xhh只是一个符号来帮助您创建值;当回显字节字符串时,Python将始终直接显示可打印的ASCII字符,而不是使用\xhh表示法。

这里的十六进制表示法只是表达每个字节值的一种方法,它实际上是0到255之间的整数.Python字符串中的每个字节都是一个具有这种约束值的字节,并且编码为{{ 1}}编解码器为这些字节生成一个十六进制数字的字符串,再从十六进制数字生成字节。

因此,您所要做的就是添加'hex'空字节和长度:

\x00

此处MAGICSTRING = '1234' value = '\x00{}\x00{}'.format(MAGICSTRING, chr(len(MAGICSTRING) + 2)) 表示法用于生成空字节,chr() function表示长度&#39;字节&#39;。

演示:

\xhh