从磁盘读取原始数据并转换

从磁盘读取原始数据并转换

请帮助找到一种转换数据的方法,如下所示:我使用 dd 实用程序从磁盘读取

dd if=/dev/sdb Skip=8388608 count=560 iflag=skip_bytes,count_bytes |hexdump -C

我正在得到

000001a0 00 00 00 00 cf 4c 79 ce 00 00 00 00 00 00 00 00 |.....Ly.........|

但我想得到:

000001a0 ce794ccf00000000 0000000000000000 |.....Ly.........|

我不必使用 hexdump,任何其他工具也可以做到这一点。谢谢。

答案1

十六进制字节的相反顺序是由于单个字节的小尾数处理造成的。

hexdump 似乎不允许使用 64 位值,但 od(八进制转储)允许。将 hexdump 的调用替换为:

od -t x8z

它输出 64 位十六进制长字和 ASCII。 ASCII 被 >...< 括起来,应该很容易跳过。

答案2

hexdump的输出是完全可定制的,即使语法一开始看起来有点晦涩:

$ seq 10 | hexdump -C
00000000  31 0a 32 0a 33 0a 34 0a  35 0a 36 0a 37 0a 38 0a  |1.2.3.4.5.6.7.8.|
00000010  39 0a 31 30 0a                                    |9.10.|
00000015
$ seq 10 | hexdump -e '"%08.8_ax " 2/8 " %016x"' -e '"  |" 16 "%_p" "|\n"' -e '"%08.8_Ax\n"'
00000000  0a340a330a320a31 0a380a370a360a35  |1.2.3.4.5.6.7.8.|
00000010  0000000a30310a39                   |9.10.|
00000015

这些 64 位整数的字节顺序(上面的小端)取决于系统的计算机体系结构/C 编译器。

请注意 0 填充以满足上面最后一个数字的缺失字节。

请注意,您可以使用 hexdump's 和 ,而不是使用dd'sskip和。count-s-n

相关内容