C++中的数据直接保存为二进制文件,长度可变的数据类型?

lxhbysn 2007-04-11 09:49:09
最近帮朋友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++不熟悉,帮忙看看它的数据格式到底是什么样的.
万分感谢!



...全文
682 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin_style 2007-04-11
  • 打赏
  • 举报
回复
关键看处理规则
roger_77 2007-04-11
  • 打赏
  • 举报
回复
不是什么变长数据,只是利用字符串与字符串长度进行读取处理
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”
liuyaoyou 2007-04-11
  • 打赏
  • 举报
回复
要想解析出来,要知道人家数据类型是怎样定义的,看数据没有定义成结构体(没有对齐),应该是连续的数据。比如说2007-3-1- 9:35:00,最常见的是分别定义成short、char、char、char、char、char型,但人家也可以都定义成short,或是int,所以生成数据字节数不同。所以如果你不清除每个参数占几个字节,没办法解析。
todototry 2007-04-11
  • 打赏
  • 举报
回复
#include<vector>
using namespace std;
todototry 2007-04-11
  • 打赏
  • 举报
回复
vector<bool>是vector的专门处理二进制数据流的版本
todototry 2007-04-11
  • 打赏
  • 举报
回复
使用vector<bool>即可,每个元素占1bit,01数据串
  • 打赏
  • 举报
回复
这个似乎比较容易实现的吧
用几个变量存储,然后根据值写入读出.
逸学堂 2007-04-11
  • 打赏
  • 举报
回复
对象序列化?
lxhbysn 2007-04-11
  • 打赏
  • 举报
回复
修正
数据头10位已经搞定,
0-3:证券所代码(占4位)
4-7:基金或股票代码
8-9:是描述后边还有几位的int型数据


rongcanf 2007-04-11
  • 打赏
  • 举报
回复
最近也在分析一个股票软件“指南针”
主要是要提取关键字进行检测的
风马牛不相及。。。呵呵
lxhbysn 2007-04-11
  • 打赏
  • 举报
回复
求的就是数据保存规则,
刚开始我也是觉得用的是type,
可是,type的长度是固定的.

后来怀疑是对象,不过,根据开发时间判断,
对象的可能性很小,97年开发的第一版.

所以觉的就是变量的二进制直接存储的.
但是来个变长的把我给搞蒙了,想不通c++的基础数据类型中什么东西内存长度是可变的.

而且,这个东西数据量很大,而读取的要求速度很快很快,
不可能用什么复杂运算,应该是直接读取,
可是,无论我怎么分位,也枚举不出对应的数据来.

应该排除是字符串啊,文件用ue打开,如果是字符串,会直接显示对应编码的字符的,
而转换成字符后,大多数是些非打印字符.

我看了乾龙等股票软件的保存格式,
也没有他这个复杂.
各位尽量帮帮忙,我c++很弱.

eirsky 2007-04-11
  • 打赏
  • 举报
回复
bitstream

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧