在 C++ 中将字节写入 ofstream

Posted

技术标签:

【中文标题】在 C++ 中将字节写入 ofstream【英文标题】:Write byte to ofstream in C++ 【发布时间】:2012-04-27 07:11:32 【问题描述】:

我有 char 数组,我想将它写入 txt 文件,但以字节为单位。

ofstream sw("C:\\Test.txt");
for(int i = 0; i < 256; i++)

  sw << (byte)myArray[i]; 

这会将字符写入文件,但我想写入字节。如果有 char 'a' 我想写 '97'。谢谢。

【问题讨论】:

A char 定义为一个字节,所以你的问题有点荒谬,但你可能想要sw.write() 你想写'9' and '7'还是原始二进制字节? ofstream sw("C:\\Data\\out.txt",ios::binary); sw 请定义“不起作用”。 如果有 'a' 字符,我想将 '97' 写入文件。没有二进制,只有数字 97。 【参考方案1】:

要使用 std::fstream 或 std::ofstream 写入一个字节或一组字节,请使用 write() 函数:std::ostream::write()

const int ArraySize = 100;
Byte byteArray[ArraySize] = ...;

std::ofstream file("myFile.data");

if(file)

   file.write(&byteArray[0], ArraySize);
   file.write(&moreData, otherSize);

【讨论】:

uint8_t x = 10; ostream.put(x); 是否等同于 uint8_t* buffer = ...; ostream.write(reinterpret_cast&lt;char*&gt;(buffer), 1)?谢谢 我相信是的,是的,但我通常不使用ostream.put()。查看 ostream.put() 的示例实现,它的行为似乎完全相同。 (假设您的示例中为uint8_t* buffer = &amp;x;,结果应该相同) 我不知道最新的标准,但是因为ostream.put() 需要一个char,所以char 是有符号还是无符号可能是特定于实现的将 ostream.put() 交给 uint8_t 会导致 value 转换错误...但我可能弄错了。最后我检查了一下,GCC 默认使用有符号字符,所以使用 ostream.write() 可能会更安全(即使它需要一个字符指针,也不会使用指向任意数据的指针进行值转换)。【参考方案2】:
ofstream sw("C:\\Test.txt");
for(int i = 0; i < 256; i++)

  sw << (int)myArray[i]; 

这会将 char 'a' 转换为 int(或字节)值 97。

【讨论】:

非常感谢。这正是我所寻找的。编辑:它不起作用,因为'í'它会写-19。那么如何正确写呢? @Hlavson:(int)(unsigned char)mArray[i]。可能只是 (unsigned char)mArray[i] 也足够了。

以上是关于在 C++ 中将字节写入 ofstream的主要内容,如果未能解决你的问题,请参考以下文章

在apache tomcat中将字节写入Web套接字时写入超时

如何在 Python 3 中将原始十六进制字节写入标准输出?

如何在 PySide 和 Python 3.X 中将字节写入 QDataStream?

如何在 C++14 中将多字节值写入共享内存?

在 C++ 中将缓冲区写入 PDF

在 C++ 中将数据写入由 CFileDialog 创建的 .txt 文件