Bashで進数を10進数に変換する方法到着もう1つの基本、特に16進数です。別の方向に行くのは簡単なようです。
$ echo $((16#55))
85
Webを検索しながら数学と文字操作を実行して関数として使用できる変換を実行するスクリプトを見つけましたが、bashには既に基数変換が組み込まれているようです。これは可能ですか?
ベストアンサー1
bash
(またはそのprintf
コマンドが利用可能な場合は、任意のシェル(通常はシェルに組み込まれている標準のPOSIXコマンド))を使用してください。
printf '%x\n' 85
を使用すると、zsh
次の操作も実行できます。
dec=85
hex=$(([##16]dec))
これは2から36までのデフォルトの数字に適用されます(0-9a-z
数字は大文字と小文字を区別しません)。
$(([#16]dev))
オプションが有効になると(1つだけ)または(デフォルト16の特別な場合として)に#
展開されます(デフォルト8にも適用されます(オプションも有効な場合は代わりに))。16#55
0x55
cbases
0125
8#125
octalzeroes
Pass 以下をksh93
使用できます。
dec=85
base54=${ printf %..54 "$dec"; }
2〜64進数に適用されます(0-9a-zA-Z@_
数字と同じ)。
にksh
はzsh
次のものもあります。
$ typeset -i34 x=123; echo "$x"
34#3l
ksh88、zsh、および pdksh には最大 36 のベースがあり、ksh93 には最大 64 のベースがあります。
long
これらはすべてシステムの整数サイズに制限されます(int
一部のシェルでは)。より大きなものには、またはbc
を使用できますdc
。
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
サポートされているデフォルトの範囲は、2つからPOSIXが要求する少なくとも99までです。 16より大きい進数の場合、9より大きい数字は、スペースで区切られた0で埋められた10進数で表されます。
$ echo 'obase=30; 123456' | bc
04 17 05 06
dc
または(bc
一部のシステムではまだラッパーである)と同じですdc
。
$ echo 30o123456p | dc
04 17 05 06