シェルスクリプトで2進数を16進数と10進数に変換する

シェルスクリプトで2進数を16進数と10進数に変換する

シェルスクリプトでバイナリを16進数と10進数に変換する必要があります。誰かが私にツールを提案できますか?

答え1

変換を作成するのはとても簡単です~から純粋なbashのバイナリ(echoおよびprintf組み込み関数):

2進数を10進数に

$ echo "$((2#101010101))"
341

2進数から16進数へ

$ printf '%x\n' "$((2#101010101))"
155

Bashだけを使用してバイナリを返すのは少し複雑なので、この問題を解決するには他の答えを確認することをお勧めします。

答え2

バイナリデータは、基本2桁ではなく、可能なすべてのバイト値(0を含む)を持つデータを意味すると仮定します。

切り替える~からバイナリ、od(標準)、xxd(とvim)、または「バイナリperlunpackが浮かび上がります。

od -An -vtu1 # for decimal
od -An -vtx1 # for hexadecimal

xxd -p # for hexa

perl -pe 'BEGIN{$\="\n";$/=\30};$_=unpack("H*",$_)' # like xxd -p

# for decimal:
perl -ne 'BEGIN{$\="\n";$/=\30;$,=" "}; print unpack("C*",$_)'

もう一度変換してください。到着バイナリ、awk(標準)xxd -rまたはperl's pack:

od -tu1上から10進出力perl

LC_ALL=C awk '{for (i = 1; i <= NF; i++) printf "%c", $i}'
perl -ape '$_=pack("C*",@F)'

六角形perl以上からxxd -p

xxd -r -p
perl -pe 'chomp;$_=pack("H*",$_)'

答え3

これを達成するために、タスクとibaseパラメータでbcを使用できます。obase

重要なのは、基本を正しく理解する必要があることです。したがって、abaseが2の場合、obaseを10に設定するとバイナリの10が2になるため、何もしません。したがって、16進表記を使用する必要があります。

したがって、2進数を10進数に変換するのは(obaseはAです)

2進数から10進数へ:

$> echo 'ibase=2;obase=A;11110001011010'|bc
15450

2進数から16進数へ:

$> echo 'ibase=2;obase=10000;11110001011010'|bc
3C5A

obase「出力ベース」を先に変更すると簡単になります。

$> echo 'obase=10;ibase=2;11110001011010'|bc
15450
$> echo 'obase=16;ibase=2;11110001011010'|bc
3C5A

答え4

バイナリで16進数で使用する場合:xxdLinux のツール、2 進数から 10 進数までの場合、qalculate ツールを使用できます。

xxd --helpxxdタイプまたはLinuxのヘルプですman xxd

関連情報