是否有像 hexdump 这样的实用程序可以处理非本地字节序?

是否有像 hexdump 这样的实用程序可以处理非本地字节序?

Hexdump 能够读取二进制数据并对其进行适当格式化,以便将其(例如)传送到 awk,这一点非常有用,但我经常需要读取二进制数据与系统原生字节序不同的文件。特别是,我需要在小端机器上读取大端数据。我的理想解决方案是使用“hexdump”并添加一个开关来反转字节序,但这种开关似乎并不存在。

有没有什么好的“次优”解决方案可以解决这个问题?

答案1

是否有像 hexdump 这样的实用程序可以处理非本地字节序?

是的,这个实用程序叫做 Perl。

实际上数据::HexDumper- 尽管你可以自己动手

数字格式
指定如何格式化数据的字符串。它可以是以下任意一种:
您会注意到它们与 perl 的 pack 函数具有相同的含义:

C——无符号字符
S - 无符号 16 位,本机字节顺序
v 或 S< - 无符号 16 位,小端字节序
n 或 S> - 无符号 16 位,大端
L - 无符号 32 位,本机字节顺序
V 或 L< - 无符号 32 位,小端
N 或 L> - 无符号 32 位,大端
Q - 无符号 64 位,原生字节序
Q< - 无符号 64 位,小端字节序
Q>-无符号 64 位,大端

答案2

至少对于 16 位字,可以通过管道传输dd conv=swab

cat file.dat | dd conv=swab | od -t x2

答案3

作为像素节拍建议,你可以使用对象复制

$ objcopy -I binary -O binary --reverse-bytes=num inputfile.bin outputfile.bin

其中num,16 位字为 2,32 位字为 4,64 位字为 8。

不幸的是,objcopy 没有接受输入stdin或将输出写入的stdout选项,因此为了将其用作管道,您需要编写一个创建临时文件的包装脚本。

此答案来自https://stackoverflow.com/a/19288235/1979048以及来自https://serverfault.com/a/329207/157443

答案4

dd conv=swab < file.dat | hexdump

相关内容