代码之家  ›  专栏  ›  技术社区  ›  Jason R. Mick

需要定义“>>”运算符才能将CIN与Int32一起使用吗?

  •  0
  • Jason R. Mick  · 技术社区  · 14 年前

    我需要从一个文件中精确读取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 回复  |  直到 14 年前
        1
  •  3
  •   Billy ONeal IS4    14 年前

    流提取运算符( >> 执行 格式化的 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.
    

    注意,这样做将引入对代码的平台依赖性,因为在不同的平台上,整数中字节的顺序是不同的。

        2
  •  2
  •   Oliver Charlesworth    14 年前

    int32 将是 typedef 因为在您的平台上,任何类型都是32位有符号整数。这种基础类型 operator>> 超载了。

    更新

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