我很困惑printf
,这就是我所做的,
printf "%x" 1024 # output 400
printf \\x400 # output @0
printf \\x400 | od -An -tu4 # output 12352, why 12352 not 1024?
来自man printf
:
解释的序列是:
...
\xHH 十六进制值 HH 字节(1 到 2 位)
您正在运行它\x400
,它是三位数。printf
prints @
,它是由 编码的字符\x40
,其余0
的被打印为文字字符,因此@0
,它不是十六进制值的表示400
。
你想要的是
printf \\x00\\x04 | od -An -tu4
打印1024
。
如果使用\x
符号,则只能表示一两个十六进制。数字(请参阅man bash
),但如果您使用0x
符号,则可以使用奇数位数:
/home/user1> printf "0x%x\n" 1024
0x400
/home/user1> printf '%d\n' 0x400
1024