回答:
bash
(あるいは提供される任意のシェル、printf
コマンドが利用可能である(多くの場合、シェルに組み込まれた標準のPOSIXコマンド)):
printf '%x\n' 85
を使用するとzsh
、次のこともできます:
dec=85
hex=$(([##16]dec))
これは、0-9a-z
2〜36の基数で機能します(数字として大文字と小文字を区別しません)。
では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
#
か?
bash
組み込みコマンド、次のことができ、入力他の塩基については8、10と16以外の任意の塩基のいずれかのベースでの数値ではなく、出力は、次のような別のシェル必要があると思いますzsh
か、ksh
または使用しますbc/dc
。
alias hex="printf '%x\n'"
printfを使用します。
$ printf "%d %x\n" $((16#55)) $((10#85))
85 55
値を変数に割り当てるには、コマンド置換を使用します。
$ x=$( printf "%x" 85 ) ; echo $x
55
-v
組み込みのprintfのオプションを:printf -v foo "%d" $((16#BEEF)); echo $foo
-v
)の使用はここでは不要です。避けたいです。
-v
フォークとパイプを回避します(ビルトインのようにここでフォークしないksh93ではなく、bashでprintf
)。$((16#55))
どちらも標準ではないことに注意してください。
x=$(some_builtin)
ますか?
すべてのPOSIX準拠のシェルに組み込まれている組み込みの算術展開の置換を使用します。これは、最近ではほとんど普遍的です。
$ echo $((0xbc))
188
そして
$ hex=dead
$ dec=$((0x$hex))
$ echo $dec
57005
注意:特に最後の例では、展開によって予期しない結果が生じる可能性があります。変数 'hex'の16進数字は、有効な16進定数を形成する必要があります。たとえば、「hex」が「0xdead」の場合、算術展開は0x0xdeadになりますが、これは定数として解釈できません。もちろん、その場合、算術展開$(($ hex))がトリックを行います。オプションの「0x」プレフィックスを削除する単純なサブストリング処理パターンマッチングを作成することは、読者の課題として残されています。
awk Velorライブラリを使用できます。
$ velour -n 'print n_baseconv(15, 10, 16)'
F
または:
$ velour -n 'print n_baseconv(ARGV[1], 10, 16)' 15
F