16进制文本插入文件头
在给设备 ota 升级时制作升级文件,会在工程生成的二进制文件头部加上一些升级信息,之前一直使用已经制作好的工具软件生成的。
要生成一个工具软件未支持的文件头,就得修改工具软件源码,重新编译工具软件(当然,也可以把工具软件做得更有扩展性一点),这无疑有点麻烦,尤其是在没有工具软件源码时。
要完成这么一个小功能,其实也不用那么复杂,使用一点 linux 中的几个命令即可。
以下1,2都是来自网络,仅作整理和备份。
将文本插入文件头
1
echo "hello world" | cat - fromFile > toFile
通过 echo 写二进制文件
1
2
3
4
5
6
7
8
9
10# 方法1
echo 000102030405 | xxd -r -ps > test
# xxd 用于二进制或十六进制显示文件内容
# -r 把 xxd 的十六进制输出内容转回原文件的二进制内容
# -ps 以 postscript 的连续十六进制转储输出,这也叫做纯十六进制转储
# 方法2
echo -e -n "\x00\x01\x02\x03\x04\x05" > test
# -e 表示使能反斜杠转义,\x 转义为十六进制
# -n 不添加行尾换行标识,echo 默认会在末尾添加 0x0A当然,处理完成后得再检查一下是否达到预期
1
2
3# 1,使用 hex editor neo 软件直接对比源码是更加推荐的方式
# 2,使用命令 diff 对比两个文件
通过看书,获取到两外两种向文件头插入行的方法:
使用 gawk 命令
用 gawk 命令
1
gawk 'BEGIN {print "HELLO"};{print $0}' fromFile > toFile
其中 BEGIN 关键字强制 gawk 在读取数据前执行
BEGIN
关键字后指定的程序脚本,即{print "HELLO"}
使用 sed 命令
1
sed '1i\HELLO' fromFile > toFile
使用 sed 的指定行的插入功能,其中参数
1i
表示在第一行前插入文本
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 飞椅档案!
评论