fread函数 读取二进制文件每次读取8位,怎么写

fread(int *a=new int[sizeof(文件大小)],8,sizeof(文件大小),文件流)

求教啊

#include <stdio.h>
#include <stdlib.h>
//读取字节数
#define READ_BYTES 1
int main()
{
    //打开文件
    FILE *fp = fopen("文件名", "rb");   //rb:以二进制方式读取
    if(fp == NULL)
    {
        printf("文件打开失败!");
        return -1;
    }
    
    //一次读取READ_BYTES字节,当READ_BYTES=1时为8位(1字节=8bit)
    int rc;
    char buff[READ_BYTES];
    while((rc=fread(buff, 1, READ_BYTES, fp)) != 0)
    {
        //读取的结果在buff中,处理逻辑如下
        //...
    }
    
    //关闭文件
    fclose(fp);
    
    return 0;
}

追问

不行啊,读取出的都是乱码,我用matlab就能读取出数据,
fid=fopen('哈哈哈哈哈,'r');
a=fread(fid,'int8');
fclose(fid);
你看看,这样怎么改改

追答

你的要求的是按8位读出二进制文件,汉字是多字节字符,如果你每读出一个就直接输出,汉字肯定是乱码了。
如果文件是按行存储的,我建议你按行读出,一次不要限于8位,一次读出一行,这样输出就没有问题了。

追问

这个文件里面都是数据,用matlab读取后第一个数是-128,这个-128是一个8位2进制数存储的,我的意思是每次读取8位就是一个10进制的数,要不然不知道会输出什么

追答

把你输出的语句题贴出来看看!即使是一个8位字符,也不一定可现,可现字符就只有那么多个。超过127就是汉字编码了。

追问

我给你私信了,你看看

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-14
8位就是一个字节呀。
char c;
fread(&c, 1, 1, fp);本回答被提问者采纳
相似回答