ifstream:从文件中以十进制格式和十六进制格式读取整数值

时间:2014-03-18 15:19:51

标签: c++ ifstream

可能不是第一个问这个问题,但找不到合适的答案......

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

您可以尝试使用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提案中。