我正在读取Raspberry中的串行数据,我所做的只是一个Hexdump --我必须找到报头,然后转到ex的头数据的第二个字节: ed 1374,我必须取值4,将其转换为十进制,并将2加到它(在本例中是它的4+2 = 6 ),我必须从头读取6个字节的数据。
再次,我必须向前移动,找到下一个带有报头的数据包,并重复相同的
我正试图通过写剧本来完成这一切
发布于 2016-04-22 19:09:08
您的描述与所提供的十六进制没有很好的结合,因为ed之后的所有第二个字节都是00。但是,您应该尝试至少掌握Unix中用于字符串处理的更复杂的工具之一,即awk。
你可以简化你的数据流,在每一行上加一个十六进制数。使用您的示例,您可以通过tr -s ' ' '\n'来传递它。但是,更有用的是,如果您执行man hexdump,您可以看到它提供了输出格式上的选项,以便每行打印一个数字,这样您就不需要进一步操作它了。例如
hexdump -v -e '1/1 "%02x\n"'将提供类似的数据
2f
ed
3f
00
08将数据导入此脚本
awk '$1=="ed" {
getline byte1
getline byte2
number = strtonum("0x" substr(byte2,2,1))
print "len is " number
data = byte1 byte2
while(number-->0){getline byte; data = data byte}
print data
} '这将检查行中的第一个单词是否为ed,然后使用getline将下一行读入变量byte1,并将后面的行读入byte2。substr()接受最后一个字符,将它与"0x“连接起来,并调用strtonum将十六进制转换为十进制。while循环调用getline这几次并连接数据。
https://unix.stackexchange.com/questions/278367
复制相似问题