fread读出来的数据不正确

FDUshiyan 2017-07-03 03:55:19
[size=14px]各位大神,我用fread来读取数据,发现读出来的数据不对,不知为何,请指点。
数据如下:18 00 21 33 46 50 6a 78 83 每次用3个字节读取,得到理论上得到的应该是18,00,21,33这样的数据,但是最红得到的结果却是:
str[0]=-870303695
str[1]=-870305744
str[2]=-870305486
str[3]=-870304973
str[4]=-870304204
str[5]=-870305739
str[6]=-870293194
str[7]=-870303689
str[8]=-859032776 我实在想不明白,请指点,代码如下:
int main(){
FILE *fp;
fp = fopen("..........\\test.lv","rb");
if(!fp)
return -1;
int d[100];
int i =0;
while (fread(&d[i],1,3*sizeof(char),fp))
{
printf("str[%d]=%d\n",i,d[i]);
++i;
}

fclose(fp);
system("pause");
return 0;
}
...全文
732 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jena_wy 2017-07-04
  • 打赏
  • 举报
回复
文档中是字符,你用整数读,所以有问题!
paschen 版主 2017-07-03
  • 打赏
  • 举报
回复
fread(&d[i],1,3*sizeof(char),fp) 改成: fread(&d[i],1,sizeof(int),fp)
开心秋水 2017-07-03
  • 打赏
  • 举报
回复
fread是从文件中逐个读取字符,不是逐个读取整数,如果想读取整数,请用fstream
jedy_woody 2017-07-03
  • 打赏
  • 举报
回复
见楼上。两个问题都给指出来了。
Huppert 2017-07-03
  • 打赏
  • 举报
回复
文件内容18空格写入到文件就是0x313820, fread以二进制读取
Huppert 2017-07-03
  • 打赏
  • 举报
回复
1的ascii码是0x31, 8 的是0x38, 空格是0x20, vc定义数组后默认是0xcc,现在好了,我们看一下d[0],读入前为 d[0] = 0xcccccccc,然后读入3个字节,结果变为 0x313820cc, 以%d显示结果可不就是 -870303695吗。其他类似。
赵4老师 2017-07-03
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
static int d[100];
int main() {
    FILE *fp;
    fp = fopen("..........\\test.lv","rb");
    if(!fp) return -1;
    int i =0;
    while (fread(&d[i],1,3*sizeof(char),fp))
    {
        printf("str[%d]=%08x\n",i,d[i]);
        ++i;
    }
    fclose(fp);
    system("pause");
    return 0;
}

64,649

社区成员

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

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