【问题标题】:how to output integers and doubles to binary file如何将整数和双精度数输出到二进制文件
【发布时间】:2012-04-21 20:52:58
【问题描述】:

我正在处理一项作业,但我被困在其中的一部分上,即整数和双精度的输出到二进制文件。

我知道我需要使用 write() 函数以及输出流的二进制标志,但是 write() 需要一个字符数组来输出。当我输出常规字符串时,我可以使用 (char *) 或使用 .c_str() 函数对其进行类型转换,但是我在使用双精度和整数时遇到了问题。

如何将整数和双精度数输出为二进制?

【问题讨论】:

  • 您需要它们可读吗?
  • 我只需要将整数和双精度数输出到二进制文件。二进制文件的内容不需要是人类可读的

标签: c++ integer double binaryfiles


【解决方案1】:

您可以取消引用您的变量,然后将指针转换为char*,然后使用sizeof() 来确定要写入多少字节。例如:

int var;
char* varAsCharP = (char*)&var;
size_t bytesToWrite = sizeof(int);

另外,如果您需要文件是可移植的,您可能希望首先将变量转换为网络字节顺序,使用各种 hton 函数(保存时)和 ntoh 函数(回读时)——尽管那只适用于整数。

【讨论】:

  • 写的时候别忘了传递类型的大小。
【解决方案2】:

您可以使用此处描述的 stdlib 方法: http://msdn.microsoft.com/en-us/library/0heszx3w%28v=vs.71%29.aspx

或者你可以使用boost::lexical_cast

或者你可以使用stringstream

任君挑选

如果您只想要字节表示,那么您可以像这样执行 memcpy:

int myVar = 10;
char * dest = new char[sizeof(myVar)];
memcpy(&dest, &myVar, sizeof(myVar));

【讨论】:

  • 我认为 OP 想要写入值的字节表示,而不是字符串表示。
  • 这种情况下可以做一个简单的memcpy,char * dest = new char[sizeof(src)]; memcpy(&dest, src, sizeof(src));
  • 错字:&src in memcpy。是的,可以这样做。
猜你喜欢
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多