十六进制字符串中的字节顺序重新排序(python)
问题内容:
我想在python中建立一个小的格式化程序,让我返回嵌入在十六进制字符串行中的数值。
它是我格式化程序的核心部分,格式化速度超过100行/秒(每行约100个字符)应该是合理快速的。
下面的代码应该给出一个示例,其中我当前被阻止。
“ data_string_in_orig”显示给定的输入格式。必须为每个字交换字节。需要从“ data_string_in_orig”交换到“
data_string_in_swapped”。最后,我需要如图所示的结构访问。预期结果在注释中。
在此先感谢Wolfgang R
#!/usr/bin/python
import binascii
import struct
## 'uint32 double'
data_string_in_orig = 'b62e000052e366667a66408d'
data_string_in_swapped = '2eb60000e3526666667a8d40'
print data_string_in_orig
packed_data = binascii.unhexlify(data_string_in_swapped)
s = struct.Struct('<Id')
unpacked_data = s.unpack_from(packed_data, 0)
print 'Unpacked Values:', unpacked_data
## Unpacked Values: (46638, 943.29999999943209)
exit(0)
问题答案:
array.arrays
有一个byteswap方法:
import binascii
import struct
import array
x = binascii.unhexlify('b62e000052e366667a66408d')
y = array.array('h', x)
y.byteswap()
s = struct.Struct('<Id')
print(s.unpack_from(y))
# (46638, 943.2999999994321)
将h
在array.array('h', x)
被选择,因为它告诉array.array
都把数据x
作为2字节短裤的阵列。重要的是,每个项目都应视为2字节长。H
,表示2字节无符号short,也可以正常工作。