文本转换,二进制数字 -> 十六进制(或十进制)

文本转换,二进制数字 -> 十六进制(或十进制)

我有一个巨大的文本文件,其中的数字代表二进制的 8 位值。我想将这些数字转换为十六进制(或十进制,其实无所谓)。也就是说,我有一个文本文件,其中包含例如

0 0 0 0  1 1 0 1
0 0 1 1  1 0 0 1
0 1 0 0  0 1 0 1
1 0 0 0  1 1 0 1

(只有 8 位)我想将其转换为,比如说,

0x0d
0x39
0x45
0x1d

这听起来可以用 awk 脚本/vim 宏或任何其他工具的组合来完成。

答案1

下面是执行此操作的 bash 脚本片段

while read line; do
    n=$((2#${line// /}))
    printf '0x%02X\n' "$n"
done <input-file

其中2#表示基数 2,${var// /}表示“删除所有空格”

答案2

使用 Perl:

perl -ne 's/ *//g; printf("0x%02x\n", eval("0b$_"))' somefile.txt

答案3

使用 awk:

awk '{d=0; for (i=1; i<=NF; i++) {d=(d*2)+$i} printf "0x%02x\n", d}' binary.txt

或者使用 bc:

(echo obase=16; ibase=2; sed 's/ //g' binary.txt) | bc

相关内容