16進数を10進数に$((0039))

16進数を10進数に$((0039))

次の値を持つ非常に長いファイルがあります。

0030..0039
2194..2199
21A9..21AA
231A..231B
23E9..23F3
23F8..23FA
25AA..25AB

16進数を10進形式に変換したいです。はい読む使用できますが、$(($HEX))返される各番号に上記のファイルを適用します。

$((0039))
bash: 0039: value too great for base (error token is "0039")

$(39)ここで正確に何が間違っているのか、このメッセージは他のエラーを読むのではなく、私が何をしたいのかを知っていると思います。しかし、この数値は高すぎるという。

奇妙なエラーメッセージのようです。誰でも説明できますか?

ベストアンサー1

0で始まる数字は8進数と見なされます。
8進数は0〜7の範囲でなければなりません(8または9ではありません)。

従って9インチは0039「ベースと比較して余りに大きい価値」である。

ただし、これは機能します(0039が16進数であると仮定)。

$ echo $((0x0039))
57

数値を変換するには:

$ number=0039
$ printf 'octal=%o decimal=%d hexadecimal=%x\n' "$((0x$number))"{,,}
octal=71 decimal=57 hexadecimal=39

おすすめ記事