如何将位域写入二进制文件
How to Write Bitfield to a Binary File
假设我有一个总计 32 位的位域。我想将这些输出到一个二进制文件中,我们称之为 "binary.bin"。如何在不崩溃的情况下解决这个问题 visual studio?
我从以前的 google 搜索中发现的关于此类事情的信息太少了,我不知道该怎么做。通常的回答是 "no one uses bitfields lmao" 但事实证明我需要使用位域来工作。
我知道位域有时低于 8 位,因此无法放入一个字节,这使得处理起来很困难,但这并不意味着我不能使用 32 位位域并将其放入变成一个二进制文件,对吧?
我在别处找到了关于打印到二进制文件的信息,希望它有用。
struct bitfield {
unsigned int b1 : 22;
unsigned int b2 : 4;
unsigned int b3 : 5;
unsigned int b4 : 1;
};
int main(){
std::ofstream ofile("binary.bin", std::ios::binary);
ofile.write((char*)&bitfield.b1, sizeof(unsigned int));
return 0;
}
这甚至不起作用,我不知道为什么,当我说 bitfield.b1 时它不喜欢它
如果你能给我任何帮助,我将不胜感激
我注意到您发布的代码中存在两个问题。
问题 1.
您需要一个对象来将其内容保存到文件中,而不是类型及其成员。
表达式bitfield.b1
从那个角度来看是不正确的。您需要:
bitfield obj;
之后,您可以使用obj.b1
引用成员。
问题 2:
该语言不允许您获取 bit-field 成员的地址。参见
解决方案
创建一个对象并将整个对象保存到文件中,而不仅仅是一个位域。
std::ofstream ofile("binary.bin", std::ios::binary);
bitfield obj;
ofile.write(retinterpret_cast<char*>(&obj), sizeof(obj));
首先你需要声明一个位域类型的变量,而不仅仅是名称为位域的结构体。写入一个
二进制文件:
bitfield bf;
... some value sett
FILE *f=fopen("binary.bin","wb");
fwrite(&bf,sizeof(bf),1,f);
fclose(f);
假设我有一个总计 32 位的位域。我想将这些输出到一个二进制文件中,我们称之为 "binary.bin"。如何在不崩溃的情况下解决这个问题 visual studio?
我从以前的 google 搜索中发现的关于此类事情的信息太少了,我不知道该怎么做。通常的回答是 "no one uses bitfields lmao" 但事实证明我需要使用位域来工作。
我知道位域有时低于 8 位,因此无法放入一个字节,这使得处理起来很困难,但这并不意味着我不能使用 32 位位域并将其放入变成一个二进制文件,对吧?
我在别处找到了关于打印到二进制文件的信息,希望它有用。
struct bitfield {
unsigned int b1 : 22;
unsigned int b2 : 4;
unsigned int b3 : 5;
unsigned int b4 : 1;
};
int main(){
std::ofstream ofile("binary.bin", std::ios::binary);
ofile.write((char*)&bitfield.b1, sizeof(unsigned int));
return 0;
}
这甚至不起作用,我不知道为什么,当我说 bitfield.b1 时它不喜欢它
如果你能给我任何帮助,我将不胜感激
我注意到您发布的代码中存在两个问题。
问题 1.
您需要一个对象来将其内容保存到文件中,而不是类型及其成员。
表达式bitfield.b1
从那个角度来看是不正确的。您需要:
bitfield obj;
之后,您可以使用obj.b1
引用成员。
问题 2:
该语言不允许您获取 bit-field 成员的地址。参见
解决方案
创建一个对象并将整个对象保存到文件中,而不仅仅是一个位域。
std::ofstream ofile("binary.bin", std::ios::binary);
bitfield obj;
ofile.write(retinterpret_cast<char*>(&obj), sizeof(obj));
首先你需要声明一个位域类型的变量,而不仅仅是名称为位域的结构体。写入一个 二进制文件:
bitfield bf;
... some value sett
FILE *f=fopen("binary.bin","wb");
fwrite(&bf,sizeof(bf),1,f);
fclose(f);