6

私は問題があります。各数値を正確に2桁で表す必要があります(つまり、Fではなく0F)

私のコードは次のように
なります。1。環境変数にあるASCII文字の読み取り数(wc -wを使用)
2。この数を16進数に変換(bcを使用)。

ステージ2の後に取得する数値に先行ゼロが含まれるようにするにはどうすればよいですか(必要な場合)

ありがとう、Amigal

4

2 に答える 2

6

実行しますprintf

$ printf "%02s" 0xf
0f

変数にのみ数字の数字がある場合、たとえば$NUMBER、必要な0xプレフィックスと直接連結できます。

$ NUMBER=fea
$ printf "%04x" 0x$NUMBER
0fea
于 2012-09-20T11:36:26.450 に答える
6

の変換部分をスキップして、次のコマンドbcで10進数を変換します。printf

#num=$(... | wc -w)
num=12  # for testing
printf "%02x" $num
0c

他の理由で16進数に変換する必要がある場合は、0xプレフィックスを使用しprintfて、数値がすでに16進数であることを示します。

#num=$(... | wc -w | bc ...)
num=c   # as obtained from bc
printf "%02x" 0x$num
0c

formatは%x、数値を16進数としてフォーマットすることを%2x要求し、2文字の幅にパディングすることを%02x要求し、具体的には、必要な先行ゼロを使用したパディングを要求します。可能なフォーマット文字列の詳細については、printfマニュアル(man printfまたは)を参照してください。info coreutils printf

于 2012-09-20T16:54:19.090 に答える