UNIX シェル スクリプトで、10 進数を 16 進数に変換するには何を使用できますか? od でうまくいくと思ったのですが、数字の ASCII 表現を与えていることに気づいていません。
プリント? きもい!今のところそれを使用していますが、他に何が利用できますか?
試しましたprintf(1)か?
printf "%x\n" 34
22
すべてのシェルの組み込み関数でそれを行う方法はおそらくありますが、移植性が低くなります。そのような機能があるかどうかを確認するために、POSIX sh 仕様をチェックしていません。
echo "obase=16; 34" | bc
整数のファイル全体を 1 行に 1 つずつフィルタリングする場合:
( echo "obase=16" ; cat file_of_integers ) | bc
16進数から10進数:
$ echo $((0xfee10000))
4276158464
10進数から16進数:
$ printf '%x\n' 26
1a
bash-4.2$ printf '%x\n' 4294967295
ffffffff
bash-4.2$ printf -v hex '%x' 4294967295
bash-4.2$ echo $hex
ffffffff
私のせいでごめんなさい、これを試してください...
#!/bin/bash
:
declare -r HEX_DIGITS="0123456789ABCDEF"
dec_value=$1
hex_value=""
until [ $dec_value == 0 ]; do
rem_value=$((dec_value % 16))
dec_value=$((dec_value / 16))
hex_digit=${HEX_DIGITS:$rem_value:1}
hex_value="${hex_digit}${hex_value}"
done
echo -e "${hex_value}"
例:
$ ./dtoh 1024
400
試す:
printf "%X\n" ${MY_NUMBER}
zshあなたはこの種のことをすることができます:
% typeset -i 16 y
% print $(( [#8] x = 32, y = 32 ))
8#40
% print $x $y
8#40 16#20
% setopt c_bases
% print $y
0x20
zsh算術評価に関するドキュメントページからの例。
Bashにも同様の機能があると思います。
私の場合、printf ソリューションの使用に関する 1 つの問題に遭遇しました。
$ printf "%x" 008
bash: printf: 008: invalid octal number
最も簡単な方法は、より高い投稿で提案されているbcでソリューションを使用することでした:
$ bc <<< "obase=16; 008"
8