我需要定义“>>”运算符使用cin与Int32的?

时间:2010-09-02 22:08:34

标签: c++ file-io operator-overloading ifstream

我需要从文件中读取32位。我在STL中使用ifstream。我可以直接说:

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ifstream::in);
if (my_stream && !my_stream.eof())
   my_stream >> my_int;

...或者我是否需要以某种方式覆盖>>运算符使用int32?我没有看到这里列出的int32: http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/

2 个答案:

答案 0 :(得分:3)

流提取运算符(>>)执行格式化的 IO,而不是二进制IO。您需要使用std::istream::read代替。您还需要将文件打开为binary。哦,检查std::istream::eof在您的代码中是多余的。

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ios::in | std::ios::binary);
if (my_stream)
{
    my_stream.read(reinterpret_cast<char*>(&my_int), sizeof(my_int));
}
//Be sure to check my_stream to see if the read succeeded.

请注意,这样做会导致平台依赖于您的代码,因为整数中的字节顺序在不同平台上是不同的。

答案 1 :(得分:2)

int32将是typedef,无论您的平台上出现何种类型的32位有符号整数。该基础类型肯定会为operator>>重载。

<强>更新

正如比利在下面指出的那样,流被设计为读取文本并将其解析为重载数据类型。因此,在您的代码示例中,它将查找一系列数字字符。因此,它不会从您的文件中读取32位。