Unix hexdump中的字节序

时间:2009-11-20 16:31:36

标签: unix endianness hexdump

以下* nix命令将一个IP和端口(127.0.0.1:80)的十六进制表示形式传输到hexdump命令中。

printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"'

-e标志允许任意格式解析输入。在这种情况下,我们将IP的前三个八位字节解析为无符号小数,后跟一个点。最后的八位字节也被解析为无符号小数,但后面跟一个冒号。最后 - 这就是问题所在 - 端口的2个字节被解析为单个无符号小数后跟换行符。

根据执行此命令的系统的字节顺序,结果会有所不同。一个大端系统将正确显示端口80;而小端系统将显示端口20480。

有没有办法操纵hexdump来了解字节顺序,同时仍允许通过-e进行任意格式规范?

1 个答案:

答案 0 :(得分:6)

我不知道可以用hexdump完成,但它很容易 在perl:

$ printf '\x00\x50' | perl -nE 'say unpack "S>"'
80
$ printf '\x00\x50' | perl -nE 'say unpack "S<"'
20480

您可以调整它以获得您想要的格式。 ('说' 需要perl 5.10。使用print for perl&lt; 5.10)

(澄清那些希望投票的人,因为我没有 “回答问题”。我建议OP替换 perl的hexdump。如果必须,请进行下调。)