C++ 如何使用fwrite将带填充的字符串写入二进制文件?

C++ 如何使用fwrite将带填充的字符串写入二进制文件?,c++,string,binary,fwrite,C++,String,Binary,Fwrite,我的要求是将指示压力单位的32字节字符串写入二进制文件。我想写的压力单位是Pa,作为一个32字节的字符串。这是我的尝试 #include <stdio.h> #include <string> using namespace std; int main() { FILE *myFile; myFile = fopen ("input_file.dat", "wb"); //Units string units = "Pa"; //Write Uni

我的要求是将指示压力单位的32字节字符串写入二进制文件。我想写的压力单位是Pa,作为一个32字节的字符串。这是我的尝试

#include <stdio.h>
#include <string>

using namespace std;

int main()
{
  FILE *myFile;
  myFile = fopen ("input_file.dat", "wb");
  //Units
  string units = "Pa";
  //Write Units
  fwrite (&units, 1, 32, myFile);
  fclose (myFile);
  return 0;
}
我希望在32字节内将Pa转换为二进制。00100000是空间。如何将这些附加到Pa

01010000 01100001 001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000

然而,我看到


不能将字符串直接写入文件,而是将字符串类的内容写入文件,这可能是指针和大小,而不是字符数据

简单的修复方法是进行以下更改以写入字符数据,如果不希望删除+1,则包括空终止符:

另一种选择是使用直接写字符串的C++流:

#include <fstream>
#include <string>

int main()
{
  std::ofstream myFile("input_file.dat", std::ios_base::binary);
  //Units
  string units = "Pa";
  //Write Units
  myFile << units;
  return 0;
}
如果计算空终止符,则字符串Pa仅为2字节3,但要将32字节写入文件。因此,您需要在字符串中填充30个空格字符。有许多不同的方法可以处理此问题:

字符单位[32]=Pa; memsetunits+2',30; fwrite单位,1,32,myFile; 标准::字符串单位=Pa; std::字符串填充32-units.size'; fwrite units.c_str,1,units.size,myFile; fwrite padding.c_str,1,padding.size,myFile; 标准::字符串单位=Pa; std::ostringstream oss;
oss您的fwrite示例正在编写空终止符,但您的cout示例没有。谢谢!这个建议对我有效。但是,我仍然不知道如何在不向字符串中手动添加空格的情况下用空格填充剩余的30位。与空值类似,我可以添加空格吗?@SuganthiSelvaraj看到我刚刚发布的答案了吗谢谢!我使用了你的第二个建议,它就像我需要它一样有效。感谢您对padding的帮助和介绍!我还尝试了C++风格的文件I/O,并获得了这个错误。teststring.cpp:在函数“int main”中:teststring.cpp:9:19:错误:变量“std::ofstream myFile”具有初始值设定项,但流myFile输入的类型不完整\u file.dat,ios::binary@SuganthiSelvaraj您的代码中包含了什么?为什么要添加空格?只需将Pa作为32字节块写入,当您读回32字节时,它就可用了。写入所有32个字节也将写入nul终止字符,因此在读回块时可以将这32个字节视为字符串。
#include <fstream>
#include <string>

int main()
{
  std::ofstream myFile("input_file.dat", std::ios_base::binary);
  //Units
  string units = "Pa";
  //Write Units
  myFile << units;
  return 0;
}