2

我想运行类似于以下的命令:

# echo 00: 0123456789abcdef | xxd -r | od -tx1
0000000 01 23 45 67 89 ab cd ef
0000010

也就是说,我想输入一个十六进制字符串并将其转换为标准输出上的字节。但是,我希望它尊重我所在机器的字节顺序,即小端。这是证明:

# lscpu | grep Byte.Order
Byte Order:            Little Endian

所以,如果我的机器是大端的,我希望它能够像上面那样工作。但既然不是,我想看看:

# <something different here> | od -tx1
0000000 ef cd ab 89 67 45 23 01
0000010

现在,xxd 有一个用于小字节序的“-e”选项。但是 1)我想要机器字节序,因为我想要在大端或小端机器上工作的东西,并且 2)“-e”无论如何都不支持“-r”。

谢谢!

4

1 回答 1

2

这个怎么样——</p>

$ echo 00: 0123456789abcdef | xxd -r | xxd -g 8 -e | xxd -r | od -tx1
0000000    ef  cd  ab  89  67  45  23  01
0000010

根据man xxd

  • -e

    切换到little-endian hexdump。此选项将字节组视为 little-endian 字节顺序的字。4 可以使用 更改默认的字节分组 -g。此选项仅适用于 hexdump,而 ASCII(或 EBCDIC)表示保持不变。命令行开关-r, -p,-i不适用于此模式。

  • -g字节| -groupsize字节

    用空格分隔每个字节字节(两个十六进制字符或每个八位数字)的输出。指定-g 0禁止分组。 字节默认为2正常模式、 4 小端模式和 1 位模式。分组不适用于postscript包含样式。

于 2021-02-08T02:32:42.643 回答