![文本转换,二进制数字 -> 十六进制(或十进制)](https://linux22.com/image/1105385/%E6%96%87%E6%9C%AC%E8%BD%AC%E6%8D%A2%EF%BC%8C%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E5%AD%97%20-%3E%20%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%EF%BC%88%E6%88%96%E5%8D%81%E8%BF%9B%E5%88%B6%EF%BC%89.png)
我有一个巨大的文本文件,其中的数字代表二进制的 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