我从一个文本文件中读取一串二进制位的值,因为我使用fwrite
存储它们。问题是文件中的第一个值是5个字节,接下来的4800个值是2个字节。所以当我试图循环读取文件并读取值时,它会给我错误的结果,因为我的程序不知道第一次需要5个字节,剩下的4800次需要2个字节。如何从文件中读取不同大小的位值?
这里是我如何骑自行车通过文件:
long lSize;
unsigned short * buffer;
size_t result;
pFile = fOpen("dataValues.txt", "rb");
lSize = ftell(pFile);
buffer = (unsigned short *) malloc (sizeof(unsigned short)*lSize);
size_t count = lSize/sizeof(short);
for(size_t i = 0; i < count; ++i)
{
result = fread(buffer+i, sizeof(unsigned short), 1, pFile);
print("%u\n", buffer[i]);
}
我敢肯定,我将需要改变我的fread
语句,因为第一个值是time_t
型的,所以我会可能需要看起来像这样的声明:
result = fread(buffer+i, sizeof(time_t), 1, pFile);
但是,这并不工作工作时,我尝试过了,我想这是因为我没有正确地改变起始位置。我认为虽然我的确读取了5字节的数据,但我并没有把足够的起始位置移动。
有没有人在这里有很好的了解fread
?你可以让我知道我可以改变什么,使我的计划完成我所需要的。
编辑:
这是我如何写入文件。
fwrite(&timer, sizeof(timer), 1, pFile);
fwrite(ptr, sizeof(unsigned short), rawData.size(), pFile);
EDIT2:
我试图读取使用ifstream
int main()
{
time_t x;
ifstream infile;
infile.open("binaryValues.txt", ios::binary | ios::in);
infile.read((char *) &x, sizeof(x));
return 0;
}
然而,现在它不编译,只是给我一堆undefined reference to
错误代码的文件我甚至没有写过。
这可能是张贴你用来存储数据的代码很有用。你也是从另一台机器上读取这个文件吗? – Galik
没有相同的机器,我添加了'fwrite'代码。这是非常标准的。我只是从QVector获取一些值并将它们写入文件。 –
用于存储数据的代码似乎是C++?所以这应该被标记为C++? – cat