Shell脚本(6)——读取二进制文件
wils
创作者俱乐部成员
论坛里最近有朋友问,如何读取bin文件?
如果这里的bin是指二进制文件(类似的还有dat等后缀),且知道数据的格式,那么可以用hexdump之类的命令读取其内容。
下面以通达信软件里的day文件为例:
如果直接用记事本打开,内容是乱码
通过搜索得知day是通达信里的日线数据文件,每一行由5个4字节整数、1个4字节浮点数、2个4字节整数组成
所以hexdump的format string大概是下面这样:
📌 | 5/4 "%d," 1/4 "%f," 2/4 "%d," "\n" |
用busybox-w32环境执行的代码如下图:
👋 | hexdump -e '5/4 "%d," 1/4 "%f," 2/4 "%d," "\n"' sh000001.day | tail -n1 |
这句代码的意思是,读取5次4字节整数、1次4字节浮点、2次4字节整数,从day文件,只显示最后一行,可以看到,和网页上给出的当天的日期、价格、量都对的上。
最后,由前文可知,js宏里可以用shell执行这一句代码(busybox里有hexdump命令);或者开启httpd网络接口,然后js宏里fetch发送请求,也是执行这一句获取需要的数据
类似的方法很多语言都提供,vba里可以直接get,python里的unpack等等,只可惜js宏里的get不知道怎么用,而使用cgi服务上面的写法又算是最简单,所以凑活用吧😁