gpt4 book ai didi

c++ - 从文件中读取错误值

转载 作者:行者123 更新时间:2023-11-30 03:49:55 24 4
gpt4 key购买 nike

我是 C++ 编码的新手。我的应用程序需要将变量写入文件,然后我想再次读取它们来做一些工作。

我将值分配给变量,然后转储到文件中,但是当我读取文件并检查变量时,它分配了不同的值。以下是我正在使用的 3 种结构。

struct fence_t
{
uint8_t b:1;
uint8_t fence_1:2;
uint8_t fence_2:2;
uint8_t res:3;
};

struct head_t
{
uint8_t format;
fence_t fence;
};

struct pack_t
{
head_t header;
.
.
.
}

我已经分配了 format = 2

packet[i].header.format=2;
packet[i].header.fence.b=0;
packet[i].header.fence.fence_1=2;
packet[i].header.fence.fence_2=2;
packet[i].header.fence.res=0;

这就是我打开文件并在其中转储数据的方式。我希望值以十六进制格式写入。

f = fopen("packets.txt","w");

fprintf(f, "%04X", packet[i].header);

现在我想在另一个函数中读取文件。

    ff.seekg(0,ios::end);
size=ff.tellg();
memblock = new pack_t [size/sizeof(pack_t)];
ff.seekg(0,ios::beg);
ff.read((char *)memblock,size);

void * p = (void *)memblock;

for(int i=0;i<3;i++)
{
struct q_entry_t t = {i, p};
queue1.push_back(t);
p = (void *)((uintptr_t)p+64);
}

当我检查格式的值时,它显示 1。

cout<<((head_t *)p)->format<<endl; 

当我查看 p 的值时,这是 Visual Studio 内存窗口的输出

0x026A54B8 31 34 30 32 30 30 30 31 30 31 30 30 30 30 30 31 30 30 140200010100000100

最佳答案

一般来说,如果你用 fprintf 写,然后用 fscanf 或 getline 读回;即面向行/ASCII 的输入机制。

如果您希望文件是结构化的二进制文件,则使用 write 进行写入,使用 read 进行读取。

不要混淆这两种机制

关于c++ - 从文件中读取错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32148392/

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