【问题标题】:How can I write to a file one byte at a time from int? C++如何从 int 一次写入一个字节的文件? C++
【发布时间】:2018-05-18 22:07:30
【问题描述】:

我正在用 C++ 一次一个字节地写入文件。到目前为止,我有这样的代码:

if ( i == 0 ) { outputfile << '\x0';}
if ( i == 1 ) { outputfile << '\x1';}
....
if ( i == 254 ) { outputfile << '\xfe';}
if ( i == 255 ) { outputfile << '\xff';}

它有效,但您可以想象这是额外的 255 行。如果我使用 Python,它会很简单:

output.write(bytes((i,)))

有没有更简单的方法将单字节整数写入字节?最多就几行代码?

过去一天我尝试使用 char 和一些转换,但我根本不擅长处理那种数据类型。我写的文件最终被损坏了。即使我得到了正确的文件大小,但在我尝试这种方式时它会占用更多的磁盘空间。

感谢阅读

【问题讨论】:

  • 一次写一个字节是浪费效率。将它们放入缓冲区,然后块写入缓冲区。

标签: c++ int output byte


【解决方案1】:

在每一行中,您只需将 int i 转换为 char

这符合你所有代码的逻辑。

outputfile << static_cast<char>(i);

但是,您可能不想要operator &lt;&lt; 使用的文本格式,而是应该写:

outputfile.put( static_cast<char>(i) );

【讨论】:

  • 谢谢。我已经尝试过 outputfile
  • @Enobeus 对不起,我不明白你评论的意思。
  • .put 仍然给我同样的问题。
  • @Enobeus 您将不得不添加一个示例,说明您尝试了什么、期望什么以及收到了什么,因为这应该可以回答您提出的问题。这意味着您在问其他问题,而这里没有人确切知道是什么。
【解决方案2】:

您不需要任何if 语句。只需打印出(char) i

当您将数据类型(如 char、int、double、float)放在变量前的括号中时,这会将变量转换为类型。

(int) 'a' 会将字符“a”转换为值 97 的整数。

(char) 97 会将整数 97 转换为字符 'a'。

你可以用类型转换做各种各样的事情,你应该注意可能的溢出,但我会把这个留给你研究。

【讨论】:

  • 谢谢。我以前也用过这个。它与 outputfile (i); 相同。我没有进行类型转换,最后一天试图理解它并让它工作。它只是没有。至少,当文件大小为 kbs 时不会。
猜你喜欢
  • 2016-02-28
  • 2021-03-07
  • 2021-03-08
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
相关资源
最近更新 更多