118

UNIX シェル スクリプトで、10 進数を 16 進数に変換するには何を使用できますか? od でうまくいくと思ったのですが、数字の ASCII 表現を与えていることに気づいていません。

プリント? きもい!今のところそれを使用していますが、他に何が利用できますか?

4

12 に答える 12

202

試しましたprintf(1)か?

printf "%x\n" 34
22

すべてのシェルの組み込み関数でそれを行う方法はおそらくありますが、移植性が低くなります。そのような機能があるかどうかを確認するために、POSIX sh 仕様をチェックしていません。

于 2008-12-18T19:04:03.417 に答える
116
echo "obase=16; 34" | bc

整数のファイル全体を 1 行に 1 つずつフィルタリングする場合:

( echo "obase=16" ; cat file_of_integers ) | bc
于 2008-12-18T21:46:53.387 に答える
72

16進数から10進数:

$ echo $((0xfee10000))
4276158464

10進数から16進数:

$ printf '%x\n' 26
1a
于 2009-12-15T16:11:10.363 に答える
18
bash-4.2$ printf '%x\n' 4294967295
ffffffff

bash-4.2$ printf -v hex '%x' 4294967295
bash-4.2$ echo $hex
ffffffff
于 2012-05-02T06:12:29.673 に答える
7

私のせいでごめんなさい、これを試してください...

#!/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
于 2010-03-12T14:24:04.670 に答える
4

試す:

printf "%X\n" ${MY_NUMBER}
于 2008-12-18T19:05:42.120 に答える
3

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にも同様の機能があると思います。

于 2008-12-18T22:26:20.170 に答える
3

私の場合、printf ソリューションの使用に関する 1 つの問題に遭遇しました。

$ printf "%x" 008 bash: printf: 008: invalid octal number

最も簡単な方法は、より高い投稿で提案されているbcでソリューションを使用することでした:

$ bc <<< "obase=16; 008" 8

于 2016-02-09T14:59:18.857 に答える