以特定格式对齐 Hexdump 数据?

以特定格式对齐 Hexdump 数据?

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

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

我试图通过编写脚本来完成这一切

答案1

您的描述与提供的十六进制转储不太吻合,因为后面的所有第二个字节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 次数并连接数据。

相关内容