字节字符串到长值

2024-04-18 18:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

字节字符串到长值:

我有一个十六进制值字符串,如“,ff,fe,d0,ea”,如何将它们转换为(大端)长值?代码段:

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函数的数组值?你知道吗


Tags: 字符串字节structffd0eaxffunpack
2条回答

下面将',ff,fe,d0,ea'解码为'\xff\xfe\xd0\xea'

dataStr = ',ff,fe,d0,ea'.replace(',', r'\x').decode('string-escape')

下面是一行代码,它将转换为适合解包的十六进制字符串。你知道吗

hexstr = "".join([chr(int(ss, 16)) for ss in dataStr.split(",") if ss])

通常,当你有这样的十六进制字符串时,你真正想要的是一个无符号整数。所以,要用unpack实现这一点,你需要做以下几点:

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

得到相同的结果。你知道吗

相关问题 更多 >