在 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'。谢谢。
【问题讨论】:
Achar
定义为一个字节,所以你的问题有点荒谬,但你可能想要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<char*>(buffer), 1)
?谢谢
我相信是的,是的,但我通常不使用ostream.put()
。查看 ostream.put() 的示例实现,它的行为似乎完全相同。 (假设您的示例中为uint8_t* buffer = &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 中将原始十六进制字节写入标准输出?