输出
我指的是日志文件中的一个索引位置,它有一个十进制值,我需要使用将其转换为十六进制
-->CCD_ 1输出例如:;0x38";
有没有办法将其输出为00 00 00 38而不是0x38?
我必须将输出与下一行的输出进行比较(看起来很像00 00 00 38(,并检查它们是否相同。
或者,我会通过这个在日志文件的下一行提取信息
-->b = line[148:159]
其将输出例如:00 00 00 38。如果我不能做前者,我能把它缩小为0x38吗?
对不起,我是新手,希望我能说清楚。请告知。谢谢
A"字节";对象有一个hex
方法,该方法有一个可选的分隔符参数。因此,只需将0x38转换为4字节长的字节(big-endian(,并调用hex:
In [18]: 0x38 .to_bytes(4, "big").hex(" ")
Out[18]: '00 00 00 38'
(注意文本0x38
和.to_bytes
之间的空格:这是能够对数字文本调用方法的必要语法技巧。如果值在变量中,像往常一样,显然不需要空格(
您是否试图将其作为带填充的十六进制?在这种情况下,您可以使用
a = hex(int(line[100:103])- 24)[2:].zfill(8)
a = ' '.join([a[i:i+2] for i in range(0, len(a), 2)])
这就变成了";0x38";变成";00 00 00 38";作为字符串
编辑:要执行与您要求相反的操作,您可以执行此
b = ''.join(line[148:159].split())
b = hex(int(b, 16))
这就变成了";00 00 00 38";进入优选的";0x38";(这可能会让你比前者更容易使用加法和减法,因为你可以转换成一个整数,用int(b[2:], 16)
对它进行普通数学运算,然后用hex()
作为普通再次计算