gpt4 book ai didi

转义十六进制的 Python 字符串

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:50 25 4
gpt4 key购买 nike

我在下面有一些 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')

感谢可以对上述内容进行的任何改进。

最佳答案

字符串 '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 符号用于生成空字节,chr() function产生长度“字节”。

演示:

>>> 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

关于转义十六进制的 Python 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29275085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com