【发布时间】:2014-03-26 20:28:28
【问题描述】:
我有一个值 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)的数字。有没有一种优雅的方法来做到这一点,还是我想多了是吗?
【问题讨论】:
-
移位和添加:
(7 << 8) + 222等于2014。 -
@Hyperboreus:更自然(对于 C):
(7 << 8) | 222