Shell-Script

shell腳本中的二進製到十六進制和十進制

  • February 1, 2022

我有一個上下文,我需要在 shell 腳本中將二進制轉換為十六進制和十進制,反之亦然。有人可以為我推荐一個工具嗎?

在純 bash 中進行二進制轉換非常簡單(echo並且printf是內置的):

二進制轉十進制

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

二進制轉十六進制

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

單獨使用 bash 回到二進制有點複雜,所以我建議你看看其他答案來解決這個問題。

假設通過二進制,您的意思是二進制數據,即具有任何可能字節值的數據,包括 0,而不是 base-2 數字:

要從二進制轉換, 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 -rperl’s pack

od -tu1perl以上的十進制輸出:

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

從六角perlxxd -p以上:

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

引用自:https://unix.stackexchange.com/questions/65280