首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以特定格式对齐Hexdump数据?

以特定格式对齐Hexdump数据?
EN

Unix & Linux用户
提问于 2016-04-22 14:51:39
回答 1查看 577关注 0票数 1

我正在读取Raspberry中的串行数据,我所做的只是一个Hexdump --我必须找到报头,然后转到ex的头数据的第二个字节: ed 1374,我必须取值4,将其转换为十进制,并将2加到它(在本例中是它的4+2 = 6 ),我必须从头读取6个字节的数据。

再次,我必须向前移动,找到下一个带有报头的数据包,并重复相同的

我正试图通过写剧本来完成这一切

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-04-22 19:09:08

您的描述与所提供的十六进制没有很好的结合,因为ed之后的所有第二个字节都是00。但是,您应该尝试至少掌握Unix中用于字符串处理的更复杂的工具之一,即awk

你可以简化你的数据流,在每一行上加一个十六进制数。使用您的示例,您可以通过tr -s ' ' '\n'来传递它。但是,更有用的是,如果您执行man hexdump,您可以看到它提供了输出格式上的选项,以便每行打印一个数字,这样您就不需要进一步操作它了。例如

代码语言:javascript
复制
hexdump -v -e '1/1 "%02x\n"'

将提供类似的数据

代码语言:javascript
复制
2f
ed
3f
00
08

将数据导入此脚本

代码语言:javascript
复制
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这几次并连接数据。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/278367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档