文件以二进制读取,每四个字节表示一个数据,如何转换为十进制

hantaook 2011-09-01 03:04:03
数据按照二进制读取:
读取的数据要求说明:
OBJECT =COLUMN
NAME ="Longitude 1"
COLUMN_NUMBER =3
DATA_TYPE =IEEE_REAL
START_BYTE =10
BYTES =4
FORMAT ="F9.4"
UNIT =Degree
DESCRIPTION ="N/A "

END_OBJECT =COLUMN

我写的代码为:(只是摘抄了一部分,文件有34982行记录,假设一行516字节,前4个为附加信息,后512为元数据)
void CReadBinary::ReadCcd()
{
CStdioFile file; //
DWORD Log;
int i;
if(!file.Open(InFile,CFile::modeRead|CFile::typeBinary)) //二进制打开
{
AfxMessageBox("Open file failed!");
}
float nlog = 0.0;
unsigned char *tmpLog = new unsigned char[1];
WORD *tmplog = new WORD[2];
float *pLog = new float[34982];
unsigned char *tmpData = new unsigned char[512]; //为Data数据设置缓冲区512字节

memset(tmpLog,0,4);
memset(tmplog,0,2);
memset(pLog,0,34982);
memset(tmpData,0,512);

int num=0;
FILE* fp;
fp = fopen(OutFile,"wb");
for (i=0;i<34982;i++)
{
file.Read(tmpLog,4);
UINT nBytesRead=file.Read(tmpData,512);
if (nBytesRead==0)
{
break;
}
else
{
tmplog[0]= MAKEWORD(tmpLog[1],tmpLog[0]);
tmplog[1]= MAKEWORD(tmpLog[3],tmpLog[2]);
Log = MAKELONG(tmplog[1],tmplog[0]);
pLog[i]= Log
fprintf(fp,"%5d %9.4f\r\n",num,pLog[i];
}
}
num++;

}
读出的结果感觉不对,各位大侠给个建议,感激不尽。
...全文
444 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hantaook 2011-09-14
  • 打赏
  • 举报
回复
忙别的了,这块还没人解决吗!!!!!!再顶,直至结贴。
hantaook 2011-09-01
  • 打赏
  • 举报
回复
IEEE_REAL的F9.4 等同于f9.4吗?直接fprintf(%9.4f)这样正确吗,是直接转化还是得在编写转化程序。
hantaook 2011-09-01
  • 打赏
  • 举报
回复
就是说我写的麻烦了?
ccy222 2011-09-01
  • 打赏
  • 举报
回复
文件本身的存储编码是什么啦?你以二进制流读出来,应该不影响本身的数据格式的啊,再说 在计算机内部的存储都是二进制的,所以你读出来之后强转下就好了吧
bdmh 2011-09-01
  • 打赏
  • 举报
回复
直接读4字节,到int型变量就是了
hantaook 2011-09-01
  • 打赏
  • 举报
回复
没人帮助解惑吗???
hantaook 2011-09-01
  • 打赏
  • 举报
回复
没人帮助解惑吗???

64,642

社区成员

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

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