gpt4 book ai didi

c++ - 如何从文件中读取不同大小的位值?

转载 作者:太空狗 更新时间:2023-10-29 21:35:50 24 4
gpt4 key购买 nike

我正在从一个二进制文本文件中读取一堆位值,因为我使用 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);

编辑 2:

我尝试使用 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 我什至没有写过的代码的错误。

最佳答案

我没有看到问题:

uint8_t five_byte_buffer[5];
uint8_t two_byte_buffer[2];
//...
ifstream my_file(/*...*/);
my_file.read(&five_byte_buffer[0], 5);
my_file.read(&two_byte_buffer[0], 2);

那么,您的具体问题是什么?

编辑 1:循环阅读

while (my_file.read(&five_byte_buffer[0], 5))
{
my_file.read(&two_byte_buffer[0], 5);
Process_Data();
}

关于c++ - 如何从文件中读取不同大小的位值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41352110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com