我在文本文件的每一行都有8个十六进制字节。是否可以将其转换为ASCII?例如,215f6674
应该转换为!_ft
。
假设每行正好有八个十六进制,这里是一个纯bash
解决方案:
#!/bin/bash
while read a
do
# echo $a
printf "x${a:0:2}x${a:2:2}x${a:4:2}x${a:6:2}n"
done < infile
如果infile
包含:
215f6674
41424344
61626364
该脚本的输出为:
!_ft
ABCD
abcd
您没有在环境中指定任何约束,所以我选择用一个简单的perl命令行来解决这个问题
perl -pe 's/([a-fA-F0-9][[a-fA-F0-9])/chr(hex($1))/eg' < your_file_of_hex
作为解释,正则表达式一次获取两个十六进制字符,并应用两个函数。第一个是"hex",将这两个十六进制宪章转换为int。第二个是"chr",将该int转换为等价的ascii。
例如
>> cat hex
414243
215f6674
616263
>> perl -pe 's/([a-fA-F0-9][[a-fA-F0-9])/chr(hex($1))/eg'<hex
ABC
!_ft
abc
>>