0

我很困惑printf,这就是我所做的,

printf "%x" 1024  # output 400
printf \\x400  # output @0
printf \\x400 | od -An -tu4  # output 12352, why 12352 not 1024?
4

2 回答 2

3

来自man printf

解释的序列是:
...
\xHH 十六进制值 HH 字节(1 到 2 位)

您正在运行它\x400,它是三位数printfprints @,它是由 编码的字符\x40,其余0的被打印为文字字符,因此@0,它不是十六进制值的表示400

你想要的是

printf \\x00\\x04 | od -An -tu4

打印1024

于 2012-09-23T10:41:07.910 回答
0

如果使用\x符号,则只能表示一两个十六进制。数字(请参阅man bash),但如果您使用0x符号,则可以使用奇数位数:

/home/user1> printf "0x%x\n" 1024
0x400
/home/user1> printf '%d\n' 0x400
1024
于 2012-09-23T14:43:45.270 回答