二进制到 CSV 记录对话

Binary to CSV record Converstion

大家好
我一直在开发一个python模块,它将二进制字符串转换为CSV记录。第 3 方应用程序通常会执行此操作,但我正在尝试将此逻辑构建到我的代码中。转换前后的记录如下:

转换后的 CSV 记录

0029.6,000.87,002.06,0029.2,0010.6,0010.0,0002.1,0002.3,00120,00168,00054,00111,00130,00000,00034,00000,00000,00039,00000,0313.1,11:09:01,06-06-2015,00000169

我正在尝试弄清楚第 3 方工具使用的转换逻辑,如果有人能帮我提供一些线索,那就太好了!
我分析过的一件事是,每个CSV值对应字节流中的一个unsigned short。
TIA,干杯!

从二进制转化为有意义的字符串,要知道二进制编码协议我们不能凭空解析二进制。

如前所述,在不知道二进制协议的情况下,很难猜测正在使用的确切编码。可能存在给定数据中不明显的特殊情况逻辑。

了解第 3 方应用程序的名称或至少与哪个领域相关会很有用。任何关于编码可能是什么的想法。

以下是您请求的关于如何进行的线索:

  1. CSV 的末尾显示日期,这可以在开头看到

31 08 11 06 06 15 20 AA A8 00 00 00 28 01 57 00 CE 00 24 01 6A 00 64 00 15 00 17 00 78 00 A8 00 36 00 6F 00 82 00 00 00 22 00 00 00 00 00 27 00 00 00

  1. 最终值 169(十六进制 A9)可疑在接下来的两个十六进制值之间

31 08 11 06 06 15 20 AA A8 00 00 00 28 01 57 00 CE 00 24 01 6A 00 64 00 15 00 17 00 78 00 A8 00 36 00 6F 00 82 00 00 00 22 00 00 00 00 00 27 00 00 00

  1. “00039”可能指最后 4 位数字

31 08 11 06 06 15 20 AA A8 00 00 00 28 01 57 00 CE 00 24 01 6A 00 64 00 15 00 17 00 78 00 A8 00 36 00 6F 00 82 00 00 00 22 00 00 00 00 00 27 00 00 00

或:

31 08 11 06 06 15 20 AA A8 00 00 00 28 01 57 00 CE 00 24 01 6A 00 64 00 15 00 17 00 78 00 A8 00 36 00 6F 00 82 00 00 00 22 00 00 00 00 00 27 00 00 00 ....or 27 00 00 00

...您猜测使用了两个字节,所以其他的可能是单独的 0 值字段。

  1. “00034”可以指代:

31 08 11 06 06 15 20 AA A8 00 00 00 28 01 57 00 CE 00 24 01 6A 00 64 00 15 00 17 00 78 00 A8 00 36 00 6F 00 82 00 00 00 22 00 00 00 00 00 27 00 00 00

等等...只需将一些十进制数字转换为十六进制并在数据中搜索可能的位置。考虑字段可能是大端或小端或其组合。

你应该看看 struct python 库,一旦你知道正在使用的格式,它在处理此类转换时很有用。

有了更多的数据示例,就可以检验上述理论了。

看看我的 Python 脚本,该脚本在给定 C 头文件和定义该二进制记录的 C 结构名称的情况下将二进制文件转换为 CSV 或 BSV 文件。 https://github.com/SShabtai/MsgGini。 虽然不完整,但它可能会给你一些提示......