Binary 此二进制数据文件的格式/编码

Binary 此二进制数据文件的格式/编码,binary,binaryfiles,Binary,Binaryfiles,我正试图编写一个与Adventure Axys(财务规划师软件)等集成的程序。该产品的网站位于: 我需要在价格文件中写入新条目,但其中大部分是二进制的。我在网上四处寻找,没找到多少,我发了电子邮件给他们支持,但我怀疑这会有帮助 我有一个短的虚拟文件和程序给该文件的打印输出。我通过一个ruby脚本运行该文件,如果是单词字符或符号,则打印字符,否则打印ASCII val。以下是Ruby脚本: pri = File.read '062109_dummy.pri' pri.each_byte do |c

我正试图编写一个与Adventure Axys(财务规划师软件)等集成的程序。该产品的网站位于:

我需要在价格文件中写入新条目,但其中大部分是二进制的。我在网上四处寻找,没找到多少,我发了电子邮件给他们支持,但我怀疑这会有帮助

我有一个短的虚拟文件和程序给该文件的打印输出。我通过一个ruby脚本运行该文件,如果是单词字符或符号,则打印字符,否则打印ASCII val。以下是Ruby脚本:

pri = File.read '062109_dummy.pri'
pri.each_byte do |char|
  print char.chr =~ /[\w!@#\$%\^&\*\(\)\-\\\/\+\.]/ ? char.chr : ' ' + char.to_s + ' '
end
和输出:

pri1.001 254  250  251  252  29  0  0  2 adusnok 0  0  0  0  0  0  0  0  0 33333s7@ 1  254  250  251  252  29  0  0  2 csusxom 0  0  0  0  0  0  0  0  0 H 225 z 20  174 GA@ 1  254  250  251  252  29  0  0  2 etusvv 0  0  0  0  0  0  0  0  0  0  246 (\ 143  194  213 F@ 1  254  250  251  252  29  0  0  2 fdusoakbx 0  0  0  0  0  0  0  174 G 225 z 20  174 (@ 1  254  250  251  252  29  0  0  2 oousfidde09 0  0  0  0  0  154  153  153  153  153  185 S@ 1  254  250251  252  29  0  0  2 qpusfid_eqix 0  0  0  0  164 p 61  10  215 cL@ 1  254  250  251  252  29  0  0  2 vausvg_sc 0  0  0  0  0  0  0 )\ 143  194  245  248 P@ 1
还有更多,但这会给你一个很好的主意。我认为很有可能这些描述和其他可能的东西被存储在其他文件中,只是进行了查找。但我知道价格在那个文件里,因为这些是价格文件,这就是重点。因此:

33333 S7=>23.45 H225 z 20 174 GA=>34.56 246(\143 194 213 F=>45.67

请注意,除了第一个数字中的3和7,所有数字都是字节值,而不是值的ASCII表示形式。还请注意,这些值可能不仅仅代表价格,但它们肯定代表价格


有什么想法吗?我不熟悉常见的二进制编码,但如果他们使用相当普通的方法,我也不会感到惊讶。

如果你要发布反向工程的编解码器,反向工程二进制格式是危险的。他们可能会在没有警告的情况下更改文件格式。但是,如果你决心这么做:

您可以做的一件事是查看IEEE浮点数的格式:

然后,从文件中的第一个字节开始,读取4或8个字节的数据。转换两组数据(4个字节和8个字节)浮点值和双精度值。检查它们是否与文件中已知的值匹配。如果匹配,则可能已找到价格的偏移量。将其打印出来,再加上偏移量。如果不匹配,请将搜索增加一个字节,然后重试

如果您可以通过这种方式找到所有的值,那么您可以通过执行类似的操作在运行时安全地修补二进制文件:查找您知道的价格,然后在正确的位置修改价格值

这并不是万无一失的,因为数据的随机序列有时会匹配。如果您注意到偏移之间有一定的距离,或者总是存在某个信号,或者甚至更好,如果您可以在文件中找到这些偏移值,您可能会有一些适度稳定的值

adus   nok   23.45   NOKIA CORP ADR   0.393  05/30/2008
csus   xom   34.56   EXXON MOBIL CORPORATION COM   1.68   06/10/2009
etus   vv    45.67   VANGUARD LRG CAP ETF US PRIME MKT 750   1.04   3/31/2009