binary - 如果我有这些文件之一的内容,则破解二进制文件格式
问题描述
我想使用 MATLAB 或 Python 读取大约 300 个测量值(每个都存储在一个 dat 文件中)。可以使用专有程序将文件导出为文本或 csv,但这必须一一完成。
问题是:使用导出文件中的已知内容破解二进制文件格式的最佳方法是什么?
不确定这是否对破解更容易有任何影响,但文件只是两列(900k)数字,从 dat 文件的大小(1,800,668 字节)来看,每个数字似乎都是 16 位(浮点数)还有一些其他信息(可能是标题)。
我尝试使用 HEX-Editor,但无法从那里获得任何趋势。
最后,我想确保指定这些是我所做的测量,并且其中的数据属于我。我不是试图获取我不应该获取的数据。
谢谢你的帮助。
编辑:再读一点,我意识到我正在进行某种压缩。当您查看 StreamWare 中的数据时,它给出了 7 个小数位,让我相信它是一个单精度值(4 个字节)。但是,文件的大小表明每个值只占用 2 个字节。
解决方案
又想了想,终于想通了。这是非常具体的,但万一另一个 Dantec StreamWare 用户遇到同样的问题,它可以为他/她节省一点时间。
首先,数据实际上只是一个向量。时间列是根据记录信号的长度和采样频率计算得出的。该信息可能在标题中(但我无法破解该部分)。
为了在 MATLAB 中获取值,我使用 跳过了标头字节fseek(fid, 668, 'bof')
,然后使用 uint16 读取数据fread(fid, 900000, 'uint16')
。这给了你整数。
要获得浮点值,您所要做的就是除以 2^16(这是一个 16 位分辨率系统)并乘以 10。我假设十倍取决于您的数据采集系统的范围。
我希望这有帮助。
推荐阅读
- php - laravel中根据外键分组
- go - golang写2个字节的数据,1个字节,1个字节倒序
- android - 适用于 Android 和 IOS 的 React-Native 命令
- html - 为什么 grunt build 从 index.html 中删除谷歌字体
- docker - 当docker0处于混杂模式时,docker容器只能通过主机访问
- javascript - html div在Safari浏览器上无法拖动可见性
- android - Flatlist 行在元素变换上与其他行的元素重叠
- batch-file - “以管理员身份运行”程序的重定向输出?
- c++ - 如何为相同的预处理器变量编译 C++
- arrays - 如何在bash的for循环中迭代2个数组