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 16 進値 HH (1 ~ 2 桁) のバイト

で実行していますが\x400、これは3 桁の数字です。によってエンコードされた文字である をprintf出力し、残りはリテラル文字として出力するため、これは16 進値の表現ではありません@\x400@0400

あなたが欲しいのは

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

を印刷し1024ます。

于 2012-09-23T10:41:07.910 に答える
0

表記法を使用すると、\x1 つか 2 つの 16 進数しか表現できません。桁数 ( を参照man bash) ですが、0x表記法を使用する場合は、奇数の桁数を使用できます。

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