Python字符串到转义十六进制

2024-05-19 12:52:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在这个例子中,MAGICSTRING是1234,“value”的预期结果是'\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')

感谢您对以上内容所做的任何改进。


Tags: 字符串代码lenvalue解决方案字符hexx00
1条回答
网友
1楼 · 发布于 2024-05-19 12:52:15

字符串'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字符串中的每个字节都是具有这样一个约束值的字节,编码到'hex'编解码器将生成一个包含这些字节的十六进制数字的字符串,并再次从十六进制数字中生成字节。

因此,您只需添加\x00空字节和长度:

MAGICSTRING = '1234'
value = '\x00{}\x00{}'.format(MAGICSTRING, chr(len(MAGICSTRING) + 2))

这里,\xhh符号用于生成空字节,^{} function生成长度“byte”。

演示:

>>> MAGICSTRING = '1234'
>>> '\x00{}\x00{}'.format(MAGICSTRING, chr(len(MAGICSTRING) + 2))
'\x001234\x00\x06'
>>> '\x00{}\x00{}'.format(MAGICSTRING, chr(len(MAGICSTRING) + 2)) == '\x00\x31\x32\x33\x34\x00\x06'
True

相关问题 更多 >