关于二进制修改保存后乱码的问题

zwh20066 2012-05-28 10:44:29
现有一二进制文件 大概里面有1000个数 我现在要对其中的150个数进行修改再保存回原位置 我的想法是先把150个数读出来
转化到double型之后进行了修改 然后现在想把这150个数再放到原来的位置 可是我运行显示的时候发现会有一堆乱码
就是后面有好多“屯屯屯屯屯屯屯屯屯屯屯屯屯”这样的 不知道为什么 下面是我的代码 麻烦大家帮帮忙啊
double *h= new double[150];
int i,j;
FILE *he;
he=fopen(edit,"r"); // edit里面存的是修改完后的那150个数,他们是double型的
FILE *fp;
fp=fopen(str_abs,"r+");// str_abs就是那个二进制文件
for(i=0;i<7;i++)
fscanf(he,"%*[^\n]%*c");
j=0;
while(!feof(he))
{
fscanf(he,"%lf %lf %lf",&h[j+2],&h[j],&h[j+1]);
j=j+3;
}
fclose(he);//上面这段是把150个数读出来放到h[j]这个数组里
m=m-1;

fseek(fp,0L,SEEK_END);
long num = ftell(fp);
double *z= new double[num+1];
z[num]='\0';
// rewind(fp);
fseek(fp,0L,SEEK_SET);
fread(z,sizeof(int),num,fp);
// fclose(fp);
// fp=fopen(str_abs,"w");
j=0;
for(int c=4004+m*1200;c<4154+m*1200;c++)
{
z[c]=h[j];
j++;
} //上面这块我想实现的是把所有二进制都读 出来保存到z[num]这个数组里面,然后再在原位置用
h[j]替换那150个二进制数 这样就得到了我修改过的二进制文件。

fwrite(z,sizeof(int),num,fp);//再把这个数组写入到fp里面
fclose(fp);
}
//ShellExecute(NULL,"open",str_abs,NULL,NULL,SW_SHOW);
}
...全文
149 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwh20066 2012-05-29
  • 打赏
  • 举报
回复
这样不可以啊 我试过了 有没有其他办法了
IranCyberArmy 2012-05-29
  • 打赏
  • 举报
回复
如果是fopen里的那个二进制文件参数,不应该是b吗?
fopen("abc.txt","a+b")
IranCyberArmy 2012-05-29
  • 打赏
  • 举报
回复
确实,好多人搞不懂不同编码文件的区别在哪里,
建议楼主下个二进制文件查看器,安装个Editplus,看看不同编码文件保存,里面到底有什么不同。
IranCyberArmy 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

“现有一二进制文件 是在txt里面保存着,我想要把其中的150个数读到一个数组里 然后进行修改 请问修改完后怎么把新的这个150个数放回到原来的位置 我尝试了很多次 每次都是把原来整个txt文件都覆盖了 有没有人可以帮忙下啊”

这是楼主上一个帖子的内容,楼主你要先弄清楚 什么是二进制文件,什么是文本文件
[/Quote]
++++++1000
Chivalry 2012-05-28
  • 打赏
  • 举报
回复
double *h= new double[150];

memset(h, 0 ,150 * sizeof(double));

int i,j;
Chivalry 2012-05-28
  • 打赏
  • 举报
回复
“现有一二进制文件 是在txt里面保存着,我想要把其中的150个数读到一个数组里 然后进行修改 请问修改完后怎么把新的这个150个数放回到原来的位置 我尝试了很多次 每次都是把原来整个txt文件都覆盖了 有没有人可以帮忙下啊”

这是楼主上一个帖子的内容,楼主你要先弄清楚 什么是二进制文件,什么是文本文件

1,658

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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