(Python)格式化struct.unpack的字符串?

时间:2014-03-26 20:28:28

标签: python csv struct hex

我有一个值为0-255的.csv文件正在模拟我正在购买的态度传感器上的数据。我正在尝试使用此模拟数据为其编写数据解析器。数据将通过串行端口传输并打包成字节数组。我已经研究过使用struct.unpack来解码数据,这对我来说很有意义,但我无法正确地将数据格式化为运行struct.unpack。这是一个例子:

年份打包为无符号短(2个十六进制值)。然后“2014”将是('0xde','0x07')。转换为dec,这给了我('222','7'),这就是我的csv文件中的内容。问题是,做

hex(222)+hex(7)

给了我

'0xde0x7'

但我不能把它放在这里

unpack('H', '0xde0x7')

因为格式不正确。它必须是

unpack('H', '\xde\x07')

这是我目前无法正常工作的方法:

dataList = reader(open('testdata.csv', "rb"), delimiter = ",", skipinitialspace=True)
dataList = [[eval(row[0])] for row in dataList]
dataList = [hex(row[0]) for row in dataList]
year = unpack('H', dataList[1]+dataList[2]))

不知怎的,我需要用'\'替换所有前导'0',然后用前导0填充少于15(十六进制F)的任何数字。是否有一种优雅的方式来做到这一点,或者我是否过度思考它?

1 个答案:

答案 0 :(得分:0)

如何使用bytearray

bytearray([222,7])
Out[15]: bytearray(b'\xde\x07')

struct.unpack('H', bytearray([222,7]))
Out[16]: (2014,)

在你的情况下,来自csv阅读器,如

row = ['222','7']

struct.unpack('H', bytearray(map(int,row)))
Out[24]: (2014,)