Shell脚本(6)——读取二进制文件

wils
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服务上面的写法又算是最简单,所以凑活用吧😁

海南省
浏览 578
收藏
7
分享
7 +1
1
+1
全部评论 1
 
厚积、薄发
· 山东省
1
回复