字节串到长值

时间:2014-12-22 17:36:48

标签: python string python-2.7 bytearray

将字符串转换为长值:

我有一串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函数的数组值?

2 个答案:

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

获得相同的结果。