私は混乱してprintf
います、これが私がしたことです、
printf "%x" 1024 # output 400
printf \\x400 # output @0
printf \\x400 | od -An -tu4 # output 12352, why 12352 not 1024?
からman printf
:
解釈されるシーケンスは次のとおりです:
...
\xHH 16 進値 HH (1 ~ 2 桁) のバイト
で実行していますが\x400
、これは3 桁の数字です。によってエンコードされた文字である をprintf
出力し、残りはリテラル文字として出力するため、これは16 進値の表現ではありません。@
\x40
0
@0
400
あなたが欲しいのは
printf \\x00\\x04 | od -An -tu4
を印刷し1024
ます。
表記法を使用すると、\x
1 つか 2 つの 16 進数しか表現できません。桁数 ( を参照man bash
) ですが、0x
表記法を使用する場合は、奇数の桁数を使用できます。
/home/user1> printf "0x%x\n" 1024
0x400
/home/user1> printf '%d\n' 0x400
1024