与this other question on decoding a hex string类似,我有一些Python 2.7脚本中的代码,这些代码已经运行了多年。我现在正试图将该脚本转换为Python 3
好的,我很抱歉最初没有发布完整的问题。我希望这能澄清情况
问题是,我正在尝试将一个较旧的Python 2.7脚本转换为Python 3.8。在大多数情况下,转换都正常,但我在转换以下代码时遇到问题:
# get Register Stings
RegString = ""
for i in range(length):
if regs[start+i]!=0:
RegString = RegString + str(format(regs[start+i],'x').decode('hex'))
以下是一些支持数据:
regs[start+0] = 20341
regs[start+1] = 29762
我认为我的Python2.7代码正在将这些转换为十六进制,分别为“4f75”和“7442”。然后分别是字符“Ou”和“tB”
在Python 3中,我遇到了以下错误:
'str' object has no attribute 'decode'
我的目标是修改Python3代码,以便脚本生成相同的结果
str(format(regs[start+i],'x').decode('hex'))
是一种非常详细和迂回的方法,可以将regs[start:start + length]
中的非零整数值转换为bytestring的单个字符(str
在Python2中实际上应该被视为一个字节序列)。它首先将整数值转换为十六进制表示形式(字符串),将该十六进制字符串解码为(一系列)字符串字符,然后对结果调用str()
(冗余地,该值已经是字符串)。假设regs
中的值是0-255(甚至是0-127)范围内的整数,那么在Python 2中,实际上应该使用^{如果要保留循环,请使用
chr()
(获取str
字符串值),或者如果需要二进制值,请使用bytes([...])
。因此:或
由于这实际上是转换整数的序列,因此您可以将整个批次传递给
bytes()
,并在执行时过滤掉零:或随后删除空值:
如果仍然认为这是一个字符串而不是字节值,则可以然后对其进行解码,使用任何适当的编码(如果整数在0-127范围内,则使用ASCII码,否则使用更具体的编解码器,在Python 2中,此代码生成了bytestring,因此请在代码中查找关于他们可能使用的编码的其他提示).
相关问题 更多 >
编程相关推荐