Table of Contents
二进制文件设计
为什么要写这个总结呢?
下午想对着行车记录仪的上报规范重新写一下Head文件的解析; 因为之前对老版本的文件已经写过一个数据解析的程序,但是新版本的调整感觉需要将整个代码再重新搞一遍;
这让我越写越有点生气,刚才发了一个邮件让他们重新找个一个更好的数据交换方式:
为什么我感到痛苦,我给你解释一下看看你就了解了! 供应商的文件原来是head+body是一个文件: 字段的形式如下
老板的格式如下:
|field1|field2|field3|....|reverse|body|
新版本的格式如下:
|field3|field1|...|resverse|
新版本不但删除了一些字段,而且老的字段也发生了改变,而且有些字段长度也变化了,我在解析的时候,需要重新调整代码的字段意义; 以及每个字段的长度;
供应商虽然把这些变化写到文档里面了,尼玛,你也不能让老子每次对着你的文档重新给你改一遍吧;
正确的编码格式应该是什么样的?
http://hjcapple.github.io/2016/03/31/binary-format.html http://stackoverflow.com/questions/323604/what-are-important-points-when-designing-a-binary-file-format
即时我们可以不用protobuf,但是二进制文件设计的时候是不是有更好的形式呢?
| 字节 | Magic | RecorderID | Ver | Tag | Length | Value | … | Tag | Length | Value | Pad |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 长度 | 4 | 32 | 4 | 1 | 4 | Length | 1 | 4 | Length | 108 | |
| 意义 | 魔数 | wifimac | 协议版本 | 字段类型 | 字段长度 | 字段值 | 字段类型 | 字段长度 | 字段值 | 保留字段 | |
当然了,这种格式里面也没有写具体的大头、小头,需要在对应的文档里面备注,但是这种方式相对而言交互性更好一些不是吗? 我也不知道供应商怎么想的,要是我们变更需要加个字段,他们就给加上了,有没有考虑到后面解析的人的问题?
总结,这样的供应商还能有市场,说明了啥?