gpt4 book ai didi

c++ - 写入二进制 C++ 错误

转载 作者:行者123 更新时间:2023-11-28 05:33:17 25 4
gpt4 key购买 nike

我在下面的 C++ 代码中编写了一个二进制文件。它输出文件但是当我打开它时。我看到它是一种 ASCII 格式。我究竟做错了什么 ?如何将字符串消息以二进制形式保存到文件中?

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string>

using std::ios;

void writeFile(const std::string &fileName, const std::string data)
{
std::ofstream ofs;
ofs.open(fileName.c_str(), ios::out | ios::binary);
if ( ofs.is_open())
{
ofs.write(data.c_str(),data.size());
ofs.close();
}
else
{
std::cerr <<"Error while writing File: "<<fileName<<std::endl;
exit (EXIT_FAILURE);
}
}

int main(int argc, char const *argv[])
{
/* code */
std::string message = "This should be binary";
writeFile("sample", message);


return 0;
}

最佳答案

如果您的字符串是 ASCII 文本,并且您以二进制模式打开,则文件将填充为 ASCII 文本; ASCII 在字符和字节之间具有 1-1 的对应关系,因此将内容解释为 ASCII 的文本编辑器会将其视为文本。

二进制模式通常只在 Windows 上起作用,它会禁用行结束转换。在文本模式的 Windows 上,字符串中的 \n 在输出时无缝地转换为 \r\n,并且从 \r\n\n 输入以匹配 Windows 约定。二进制模式禁用该转换,但除此之外什么也没有改变。

如果你想在 Windows 上确认这一点,以二进制模式将类似 "Foo\nBar" 的字符串写入一个文件,然后用 notepad.exe 打开它(它是一个“愚蠢”的编辑器,坚持 \r\n 仅用于行尾)。它将在一行中显示这两个词;如果您在文本模式下将相同的字符串写入文件,它们将出现在不同的行上。

关于c++ - 写入二进制 C++ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38922149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com