我正试图从我通过柏树之一开发的硬件中捕获一些数据。 fx2lp芯片。我用过柏树'用于将我的数据流样本记录到文件中的软件,我试图用python读取。但是,当我阅读它时,我得到一些有趣的输出,我不确定如何解释。
我打开这样的文件:
f = open("testdata_5Aug2014.dat","rb")
然后我以各种大小的块读取数据,类似于:
f.read(100)
通常,上述行(以及我想看到的)的结果是这样的:
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
但我有时会得到包含' s' s' s的回报,如下所示:
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14K\x01?\x00\xff??\x00\xff??\x00\xff??\x00\xff?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
这是一个问题,因为当我使用struct.unpack来解析它时,它不会返回任何附加了特殊字符的字节。
所以我的问题是:那些符号是什么?他们是怎么到那儿的?以及如何删除它们或处理它们?
答案 0 :(得分:1)
您正在从文件中读取二进制数据,但f.read
将该数据作为字符串返回。当您打印该字符串时,它会将这些字节解释为字符。但是,并非每个字节值都映射到可显示的字符,因此一些字节显示为转义序列:\x
后跟两个十六进制数字。例如,0显示为\x00
,255显示为\xff
。
某些值会映射到字符,例如63映射到'?'和116映射到't'。 ord
和chr
函数可分别用于获取字符的数值和数字的字符映射,因此ord('t')
返回116并且chr(63)
返回'?'
。
无论哪种方式,无论它如何显示,您的数据都应该没问题,并且struct.unpack
应该能够像往常一样使用它。