
シェルスクリプトでバイナリを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
)、または「バイナリperl
」unpack
が浮かび上がります。
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 --help
xxdタイプまたはLinuxのヘルプですman xxd
。