C++ ofStream:“<<”与 "put"
C++ ofStream: "<<" vs "put"
作为 C++ 的新手,我对使用 ofstream
写入文本文件时 <<
和 put()
的含义感到困惑。我尝试使用以下两种样式进行实验,如下所示:
方法一:
void writeTester() {
std::ofstream oFile("Resources/tst.txt", std::ios::out | std::ios::trunc);
std::vector<int> v{ 1,2,3,4 };
for (int i = 0;i < 4;i++) {
oFile.put(v[i]);
//casting to character pointer and writing also produced similar result
//oFile.put(*(char*)&v[i]);
}
oFile.close();
}
方法二:
void writeTester() {
std::ofstream oFile("Resources/tst.txt", std::ios::out | std::ios::trunc);
std::vector<int> v{ 1,2,3,4 };
for (int i = 0;i < 4;i++) {
oFile << v[i];
}
oFile.close();
}
虽然方法 2 将预期结果写入文件 (1234),但方法 1 将一些垃圾值写入文件。
这两种风格有什么区别,什么时候使用哪一种?另外,使用方法 1 将“1234”作为写入文件的输出的正确方法是什么?
简而言之,使用“<<”运算符意味着可以使用某些重载,这意味着写入整数值(如您的情况)将意味着它们在写入文件之前转换为字符串表示形式。
但是,使用 put 会将单个字节写入流。这意味着您的 4 字节 int
将被截断为一个字节,从而将无意义的数据写入您的文件。
Here's ofstream::put 的文档。
And here's ofstream 的文档。
为了完成并激发您的兴趣,这里有一个 ASCII table,您可以在其中查找您写入文件的值。取决于您机器的字节顺序(字节序),写入哪个字符。在 LE 机器上它应该是 NUL,但有时我自己会感到困惑并且混淆了我脑海中的字节顺序所以请对最后一句话持保留态度。
作为 C++ 的新手,我对使用 ofstream
写入文本文件时 <<
和 put()
的含义感到困惑。我尝试使用以下两种样式进行实验,如下所示:
方法一:
void writeTester() {
std::ofstream oFile("Resources/tst.txt", std::ios::out | std::ios::trunc);
std::vector<int> v{ 1,2,3,4 };
for (int i = 0;i < 4;i++) {
oFile.put(v[i]);
//casting to character pointer and writing also produced similar result
//oFile.put(*(char*)&v[i]);
}
oFile.close();
}
方法二:
void writeTester() {
std::ofstream oFile("Resources/tst.txt", std::ios::out | std::ios::trunc);
std::vector<int> v{ 1,2,3,4 };
for (int i = 0;i < 4;i++) {
oFile << v[i];
}
oFile.close();
}
虽然方法 2 将预期结果写入文件 (1234),但方法 1 将一些垃圾值写入文件。
这两种风格有什么区别,什么时候使用哪一种?另外,使用方法 1 将“1234”作为写入文件的输出的正确方法是什么?
简而言之,使用“<<”运算符意味着可以使用某些重载,这意味着写入整数值(如您的情况)将意味着它们在写入文件之前转换为字符串表示形式。
但是,使用 put 会将单个字节写入流。这意味着您的 4 字节 int
将被截断为一个字节,从而将无意义的数据写入您的文件。
Here's ofstream::put 的文档。 And here's ofstream 的文档。
为了完成并激发您的兴趣,这里有一个 ASCII table,您可以在其中查找您写入文件的值。取决于您机器的字节顺序(字节序),写入哪个字符。在 LE 机器上它应该是 NUL,但有时我自己会感到困惑并且混淆了我脑海中的字节顺序所以请对最后一句话持保留态度。