将字符串转换为长值:
我有一串Hex值,如' ,ff,fe,d0,ea ',如何将这些值转换为(big-endian)长值?代码段:
dataStr = ',ff,fe,d0,ea'
dataVal = struct.unpack('>l', '\xff\xfe\xd0\xea')[0]
print dataStr, ' = ', dataVal # prints out ,ff,fe,d0,ea = -77590
我认为\
是一个不可打印的字符,所以我认为我的问题确实(给定了代码段),如何从,ff,fe,d0,ea
转换为\xff\xfe\xd0\xea
?或任何适合struct.unpack
函数的数组值?
答案 0 :(得分:4)
以下内容会将',ff,fe,d0,ea'
解码为'\xff\xfe\xd0\xea'
dataStr = ',ff,fe,d0,ea'.replace(',', r'\x').decode('string-escape')
答案 1 :(得分:0)
这是一行将转换为适合解包的十六进制字符串。
hexstr = "".join([chr(int(ss, 16)) for ss in dataStr.split(",") if ss])
通常当你有这样的十六进制字符串时,你真正想要的是一个无符号整数。所以,要解压缩,你可以这样做:
myval = struct.unpack(">I", hexstr)[0]
现在结果是4294889706。
但是在第一行你已经有了整数,所以你也可以自己转移它们。这是你如何做到的。
res = 0
for v in [int(ss, 16) for ss in dataStr.split(",") if ss]:
res <<= 8
res += v
获得相同的结果。