BASH基本変換を10進数から16進数に変換

BASH基本変換を10進数から16進数に変換

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#550x55cbases01258#125octalzeroes

Pass 以下をksh93使用できます。

dec=85
base54=${ printf %..54 "$dec"; }

2〜64進数に適用されます(0-9a-zA-Z@_数字と同じ)。

kshzsh次のものもあります。

$ 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

おすすめ記事