让我们说我有一个总计32位的位域。我想将它们输出到二进制文件中,让我们将其称为“ binary.bin”。我该如何解决而又不会使Visual Studio崩溃?
在以前的Google搜索中,我发现的信息很少,我不知道该怎么办。通常的回答是“没人使用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时,它不喜欢它
非常感谢您能为我提供的帮助?
答案 0 :(得分:1)
我注意到您发布的代码中有两个问题。
您需要一个对象来将其内容保存到文件中,而不是类型及其成员。
从这个角度来看,表达式bitfield.b1
是不正确的。您需要:
bitfield obj;
之后,您可以使用obj.b1
来引用该成员。
该语言不允许您获取位域成员的地址。参见Are there any variables whose address can not be obtained?
创建一个对象并将整个对象保存到文件中,而不仅仅是位字段。
std::ofstream ofile("binary.bin", std::ios::binary);
bitfield obj;
ofile.write(retinterpret_cast<char*>(&obj), sizeof(obj));
答案 1 :(得分:0)
首先,您需要声明一个类型为bitfield的变量,而不仅仅是声明名称为bitfield的结构。写到 二进制文件:
bitfield bf;
... some value sett
FILE *f=fopen("binary.bin","wb");
fwrite(&bf,sizeof(bf),1,f);
fclose(f);