【问题标题】:ifstream: reading integer values in decimal format and in hexadecimal format from a fileifstream:从文件中读取十进制格式和十六进制格式的整数值
【发布时间】:2014-03-18 15:19:50
【问题描述】:

可能不是第一个问这个的人,但找不到正确的答案......

我正在尝试使用 ifstream 对象从文本文件中读取整数值。

一些整数值以十进制格式表示,而另一些则以十六进制格式表示。

例如:

0xAB 1 2 3
4 5 0x12 6
6 0xF 1 23

以下代码曾经可以工作(早在 VS6 时代), 十进制和十六进制字符串:

ifstream file(fileName);
int value = 0;
file >> value;

将其移植到 MSVC++ 2010 后,它似乎只适用于十进制字符串。

所以我假设std::stream 类中的一些基本内容发生了变化。

我说的对吗?如果是,那是什么?

无论如何,如何在不检查每个字符串的格式的情况下从文件中读取所有整数值?

谢谢

更新 - 在将我的项目从 VS6 移植到 MSVC++ 2010 时,我还必须进行更改:

从这里:

#include <fstream.h>

进入这个:

#include <fstream>
using namespace std;

也许这就是不同的原因,虽然我看不出是怎么...

另一个更新:

由于我的项目中有 GLUI 库,我必须链接一些旧的默认库;以下页面可能会有所启发:http://msdn.microsoft.com/en-us/library/8h8eh904%28v=vs.90%29.aspx

【问题讨论】:

  • &lt;fstream.h&gt; 是非标准的,因此可能与它有关。
  • 您可能确实需要以不同的方式处理它们。
  • @herohuyongtao:那么从VS6.0开始发生了什么? ifstream 类(或其他任何地方)的区别在哪里?
  • Confirmed that this does not work in C++。老实说,我认为确实如此。
  • @Lightness Races in Orbit:嗯,它适用于ss &gt;&gt; std::hex &gt;&gt; value,但是当ifstream 对象只是“停止工作”时,我仍然会遇到问题,我无法找出原因。我在我的问题中添加的链接 (msdn.microsoft.com/en-us/library/8h8eh904%28v=vs.90%29.aspx) 可能会对此提供更多见解,但我仍然不确定如何处理该问题。

标签: c++ ifstream


【解决方案1】:

您可以尝试使用 std::hex 修饰符:http://coliru.stacked-crooked.com/a/50c80c6bc00031fc

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream ss("1 2 3 0XFF 4 5 6");
    unsigned value = 0;
    while (ss >> std::hex >> value) {
        std::cout << value << std::endl;
    }
}

输出:

1
2
3
255
4
5
6

我刚刚将 std::hex 添加到@lightness-races-in-orbit 提案中。

【讨论】:

    猜你喜欢
    • 2011-10-18
    • 2021-11-20
    • 2013-01-21
    • 1970-01-01
    • 2012-08-01
    • 2010-12-09
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多