C++ 如何将位字段写入二进制文件
假设我有一个总计为32位的位字段。我想把它们输出到一个二进制文件中,我们称之为“binary.bin”。如何在不破坏visual studio的情况下进行此操作 在以前的谷歌搜索中,我几乎找不到这样的信息,我不知道该怎么办。通常的回答是“没有人使用位域lmao”,但事实证明我需要使用位域进行工作 我知道位域有时小于8位,这使得它不可能适合一个字节,这使得它很难处理,但这并不意味着我不能将一个32位的位域放入一个二进制文件,对吗 我在别处找到了关于打印到二进制文件的信息,希望它能起作用C++ 如何将位字段写入二进制文件,c++,io,binary,bit-fields,C++,Io,Binary,Bit Fields,假设我有一个总计为32位的位字段。我想把它们输出到一个二进制文件中,我们称之为“binary.bin”。如何在不破坏visual studio的情况下进行此操作 在以前的谷歌搜索中,我几乎找不到这样的信息,我不知道该怎么办。通常的回答是“没有人使用位域lmao”,但事实证明我需要使用位域进行工作 我知道位域有时小于8位,这使得它不可能适合一个字节,这使得它很难处理,但这并不意味着我不能将一个32位的位域放入一个二进制文件,对吗 我在别处找到了关于打印到二进制文件的信息,希望它能起作用 struc
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。 您需要一个对象将其内容保存到文件中,而不是类型及其成员 从这个角度来看,表达式
位字段.b1
不正确。你需要:
bitfield obj;
之后,您可以使用obj.b1
引用该成员
问题2:
该语言不允许您获取位字段成员的地址。看
解决方案 创建一个对象并将整个对象保存到文件中,而不仅仅是一个位字段
std::ofstream ofile("binary.bin", std::ios::binary);
bitfield obj;
ofile.write(retinterpret_cast<char*>(&obj), sizeof(obj));
文件流的std::of(“binary.bin”,std::ios::binary);
位域对象;
ofile.write(重新解释强制转换(&obj),sizeof(obj));
首先,您需要声明bitfield类型的变量,而不仅仅是名为bitfield的结构。写进 二进制文件:
bitfield bf;
... some value sett
FILE *f=fopen("binary.bin","wb");
fwrite(&bf,sizeof(bf),1,f);
fclose(f);
“这甚至不起作用”不是一个简明的问题描述。请澄清你的问题。