请帮助找到一种转换数据的方法,如下所示:我使用 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