相关疑难解决方法(0)

为什么fread()停在一个0的字符串?

我正在尝试使用以下二进制配置读取二进制文件

00 00 00 1A 79 20 83 DB 44 ...
Run Code Online (Sandbox Code Playgroud)

使用以下功能

static BitArray getBitArray(string filename)
{
    FILE *fs = fopen(filename.data(),"r");
    fseek (fs , 0 , SEEK_END);
    unsigned long s = ftell (fs);
    rewind (fs);

    unsigned char *buffer = new unsigned char[s+1];

    fread(buffer,1,s,fs);

    BitArray bArray;
    for(int i=0; i<s; i++)
        bArray.add(buffer[i]);

    delete[] buffer;
    fclose(fs);
    return bArray;
}
Run Code Online (Sandbox Code Playgroud)

这里BitArray只是我自己的一点操纵类.问题是,对于我上面提到的bin文件,它只读取前三个0,就像这样

00 00 00
Run Code Online (Sandbox Code Playgroud)

即使fseek找到了正确的文件大小.

至于为什么我需要字符串0,是因为00 00 00 1A形成一个32位整数,它恰好小到足以留下三个0x00s.

我怀疑0x00在文件开头的一串s被识别为EOF,所以我尝试在文件前填充一个字符,但它没有完全解决.

可能是什么导致了这个?

c io file fread

2
推荐指数
1
解决办法
766
查看次数

C fread 省略 0x0D

我的代码将文件读入 unsigned char* 数组。该文件实际上是一个文本文件,其“正常”行结尾为 0x0D、0x0A,长度为 64 字节。

FILE * inputFile = fopen(sInfile.c_str(), "r+");
unsigned char * readArray = (unsigned char *)malloc(sizeof(unsigned char)*readSize); //readSize=64
int bytes_read = fread(readArray, sizeof(unsigned char), readSize, inputFile);
Run Code Online (Sandbox Code Playgroud)

但 bytes_read 是 59,当我检查 readArray 时,它没有任何 \r (0x0D),但文件有。为什么 fread 会跳过所有这些值?有没有一个设置可以控制这个?

c fread

1
推荐指数
1
解决办法
628
查看次数

标签 统计

c ×2

fread ×2

file ×1

io ×1