我有一个值为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)的任何数字。是否有一种优雅的方式来做到这一点,或者我是否过度思考它?
答案 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,)