我在Python中有这部分代码:
for line in response.body.split("\n"):
if line != "":
opg = int(line.split(" ")[2])
opc = int(line.split(" ")[3])
value = line.split(" ")[5]
if command == 'IDENTIFY':
if opg==opcodegroupr and opc==opcoder:
print line
ret['success'] = "IDENTIFY: The value is %s " % (value)
self.write(tornado.escape.json_encode(ret))
self.finish()
变量'line'以这种方式制作:
1363005087 2459546910990453036 151 88 4 0x15000000
每个字段都是整数,但不是最后一个字段。最后一个字段是十六进制数字。
我会取这个十六进制数,并在每字节分割字节后。例如我会那样做 0x15000000在15 00 00 00分割。
我该怎么办?我尝试使用value.encode(“hex”)但是dows不能正常工作... value是一个字符串?我不知道如何考虑这个变量..
答案 0 :(得分:2)
如果十六进制值已经是文本,则无需再进行任何转换:
>>> text = "0x15000000"
>>> text = text[2:] # remove literal type prefix
>>> text = text.zfill(len(text) + len(text) % 2) # pad with zeros for even digits
>>> ' '.join(text[i: i+2] for i in range(0, len(text), 2)) # split into 2-digit chunks
'15 00 00 00'
(根据@tobias-k关于零填充的建议编辑)
答案 1 :(得分:1)
试试这个:
def split_hex(value):
value = value[2:] if len(value) % 2 == 0 else "0" + value[2:]
return " ".join(value[i:i+2] for i in range(0, len(value), 2))
请注意,如果十六进制数具有奇数个位置,我们必须添加前导零以将其正确地分割为字节。
print split_hex("0x1234567")
>>> 01 23 45 67
答案 2 :(得分:0)
value = line.split(" ")[5]
value
是一个字符串,因为您没有将其转换。您可以使用int(value, 16)
从十六进制字符串中创建一个int,例如
>>> int('0x15000000', 16)
352321536