C++中的数据直接保存为二进制文件,长度可变的数据类型?该怎么处理
C++中的数据直接保存为二进制文件,长度可变的数据类型?
最近帮朋友2次开发了一个程序.是一个股票分析软件
遇到一个问题,他的源程序是用c++开发的,
没有源代码(原开发人员早散了,很多年前的程序),
现在需要生成供原来的程序导入用的数据文件.
我看了一下用原程序备份出的数据文件,
是2进制的,基本结构了解了一些.
数据头10位已经搞定,
0-3:证券所代码(占4位)
4-8:基金或股票代码
9-10:是描述后边还有几位的int型数据
剩下的就搞不定了,最长见的是35位(绝大多数都是35位,
最少的27位,最长的41位
这些数据中应该还包含:日期,开盘价,最高价,收盘价等
我很纳闷,c++中有变长的数据类型吗?
各基金需要的数据都是一样的啊.
尝试者生成了一个价格全是0的文件,
长度变成了23位,把开盘价改成1,长度变成了27.
全部价格为0的16进制数据
00000000h: 06 00 00 00 01 00 00 00 17 00 57 4D 43 31 35 36
00000010h: 0A DC C4 50 04 1E 11 09 85 42 E1 90 D8 74 3E 15
00000020h: 00
开盘价为1的16进制数据
00000000h: 06 00 00 00 01 00 00 00 1B 00 57 4D 43 31 35 36
00000010h: 0A DC C4 50 00 01 00 3F 83 C2 E1 90 D8 74 3E 21
00000020h: 11 89 41 E0 00
以上数据还包含有一个日期 2007-3-1- 9:35:00
这里只取了一个文件中的第一个基金的信息,
我对C++不熟悉,帮忙看看它的数据格式到底是什么样的.
万分感谢!
------解决方案--------------------
要想解析出来,要知道人家数据类型是怎样定义的,看数据没有定义成结构体(没有对齐),应该是连续的数据。比如说2007-3-1- 9:35:00,最常见的是分别定义成short、char、char、char、char、char型,但人家也可以都定义成short,或是int,所以生成数据字节数不同。所以如果你不清除每个参数占几个字节,没办法解析。
------解决方案--------------------
不是什么变长数据,只是利用字符串与字符串长度进行读取处理
06 00 00 00 //0-3:证券所代码(占4位)
01 00 00 00 //4-7:基金或股票代码
17 00 //8-9:是描述后边需要读取的字符串长度(多少字节)
后面据观察应该是一个变长字符串,其长度由前一个short整数决定,最后是
00// 字符串的结束符
所以关键是程序是把这个字符串读取后,其处理规则不清楚,我们也看不出什么名堂来,
而且那个日期时间格式也不知是以什么类型保存后转换为字符串的
如果日期时间是以time_t存放 "2007-3-1 9:35:00 "应该是“C4 2D E6 45”
------解决方案--------------------
最近也在分析一个股票软件“指南针”
主要是要提取关键字进行检测的
风马牛不相及。。。呵呵
最近帮朋友2次开发了一个程序.是一个股票分析软件
遇到一个问题,他的源程序是用c++开发的,
没有源代码(原开发人员早散了,很多年前的程序),
现在需要生成供原来的程序导入用的数据文件.
我看了一下用原程序备份出的数据文件,
是2进制的,基本结构了解了一些.
数据头10位已经搞定,
0-3:证券所代码(占4位)
4-8:基金或股票代码
9-10:是描述后边还有几位的int型数据
剩下的就搞不定了,最长见的是35位(绝大多数都是35位,
最少的27位,最长的41位
这些数据中应该还包含:日期,开盘价,最高价,收盘价等
我很纳闷,c++中有变长的数据类型吗?
各基金需要的数据都是一样的啊.
尝试者生成了一个价格全是0的文件,
长度变成了23位,把开盘价改成1,长度变成了27.
全部价格为0的16进制数据
00000000h: 06 00 00 00 01 00 00 00 17 00 57 4D 43 31 35 36
00000010h: 0A DC C4 50 04 1E 11 09 85 42 E1 90 D8 74 3E 15
00000020h: 00
开盘价为1的16进制数据
00000000h: 06 00 00 00 01 00 00 00 1B 00 57 4D 43 31 35 36
00000010h: 0A DC C4 50 00 01 00 3F 83 C2 E1 90 D8 74 3E 21
00000020h: 11 89 41 E0 00
以上数据还包含有一个日期 2007-3-1- 9:35:00
这里只取了一个文件中的第一个基金的信息,
我对C++不熟悉,帮忙看看它的数据格式到底是什么样的.
万分感谢!
------解决方案--------------------
要想解析出来,要知道人家数据类型是怎样定义的,看数据没有定义成结构体(没有对齐),应该是连续的数据。比如说2007-3-1- 9:35:00,最常见的是分别定义成short、char、char、char、char、char型,但人家也可以都定义成short,或是int,所以生成数据字节数不同。所以如果你不清除每个参数占几个字节,没办法解析。
------解决方案--------------------
不是什么变长数据,只是利用字符串与字符串长度进行读取处理
06 00 00 00 //0-3:证券所代码(占4位)
01 00 00 00 //4-7:基金或股票代码
17 00 //8-9:是描述后边需要读取的字符串长度(多少字节)
后面据观察应该是一个变长字符串,其长度由前一个short整数决定,最后是
00// 字符串的结束符
所以关键是程序是把这个字符串读取后,其处理规则不清楚,我们也看不出什么名堂来,
而且那个日期时间格式也不知是以什么类型保存后转换为字符串的
如果日期时间是以time_t存放 "2007-3-1 9:35:00 "应该是“C4 2D E6 45”
------解决方案--------------------
最近也在分析一个股票软件“指南针”
主要是要提取关键字进行检测的
风马牛不相及。。。呵呵