Shell-Script
shell腳本中的二進製到十六進制和十進制
我有一個上下文,我需要在 shell 腳本中將二進制轉換為十六進制和十進制,反之亦然。有人可以為我推荐一個工具嗎?
在純 bash 中進行二進制轉換非常簡單(
echo
並且printf
是內置的):二進制轉十進制
$ echo "$((2#101010101))" 341
二進制轉十六進制
$ printf '%x\n' "$((2#101010101))" 155
單獨使用 bash 回到二進制有點複雜,所以我建議你看看其他答案來解決這個問題。
假設通過二進制,您的意思是二進制數據,即具有任何可能字節值的數據,包括 0,而不是 base-2 數字:
要從二進制轉換,
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
’spack
:從
od -tu1
或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*",$_)'