二进制到CSV记录会话

时间:2015-06-10 08:19:12

标签: python csv binary data-conversion hexdump

Hi Folks
我一直在研究一个python模块,它将二进制字符串转换为CSV记录。第三方应用程序通常会这样做,但是我正在尝试将此逻辑构建到我的代码中。转换前后的记录如下:

转换后的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

我正在试图找出第三方工具使用的转换逻辑,如果有人可以帮我提供一些关于此的线索,那就太好了!我分析的一件事是每个CSV值对应于字节流中的无符号短路。祝,TIA,欢呼!

3 个答案:

答案 0 :(得分:1)

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

了解第三方应用程序的名称或至少与其相关的字段将是有用的。任何有关编码可能是什么的想法。

以下是您要求如何处理的线索:

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

    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)可疑地位于接下来的两个十六进制值之间
    2.   

      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位数字
      2.   

        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 ....或 27 00 00 00

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

        1. “00034”,可以参考:
        2.   

          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库,一旦你知道正在使用的格式,这对于处理这样的转换很有用。

          通过更多数据示例,可以测试上述理论。

答案 1 :(得分:0)

从二进制文件到有意义的字符串,我们必须知道二进制代码协议我们无法凭空解决二进制文件。

答案 2 :(得分:0)

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