Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将位字段写入二进制文件_C++_Io_Binary_Bit Fields - Fatal编程技术网

C++ 如何将位字段写入二进制文件

C++ 如何将位字段写入二进制文件,c++,io,binary,bit-fields,C++,Io,Binary,Bit Fields,假设我有一个总计为32位的位字段。我想把它们输出到一个二进制文件中,我们称之为“binary.bin”。如何在不破坏visual studio的情况下进行此操作 在以前的谷歌搜索中,我几乎找不到这样的信息,我不知道该怎么办。通常的回答是“没有人使用位域lmao”,但事实证明我需要使用位域进行工作 我知道位域有时小于8位,这使得它不可能适合一个字节,这使得它很难处理,但这并不意味着我不能将一个32位的位域放入一个二进制文件,对吗 我在别处找到了关于打印到二进制文件的信息,希望它能起作用 struc

假设我有一个总计为32位的位字段。我想把它们输出到一个二进制文件中,我们称之为“binary.bin”。如何在不破坏visual studio的情况下进行此操作

在以前的谷歌搜索中,我几乎找不到这样的信息,我不知道该怎么办。通常的回答是“没有人使用位域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。 您需要一个对象将其内容保存到文件中,而不是类型及其成员

从这个角度来看,表达式
位字段.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);
“这甚至不起作用”不是一个简明的问题描述。请澄清你的问题。