如何在c ++中使用fstream从文件中读取十六进制值?

时间:2011-02-18 11:23:52

标签: c++ fstream

正如标题所说,你如何使用fstream读取十六进制值?

我有这个代码:(假设我们在文件中有“FF”。)

fstream infile;
infile.open(filename, fstream::in|fstream::out|fstream::app);

int a;
infile >> std::hex;
infile >> a;
cout << hex << a;

但这并没有给我任何输出而不是ff。我知道有一个fscanf(fp, "%x", val),但我很好奇有没有办法使用流库来做到这一点。

更新

我的代码一直都是正确的,事实证明我的错误是我无法阅读"FFF"并将其放入变量a,b,c中这样

while (infile >> hex >> a >> b >> c)
  {
    cout << hex << a << b << c << "\n";
  }

有人可以帮我这个吗?我是否必须将要读取的每个HEX值与空格分开? 因为infile >> hex >> setw(1)不起作用..

4 个答案:

答案 0 :(得分:10)

您可以使用十六进制修饰符

int n;
cin >> hex >> n;

答案 1 :(得分:6)

你必须在阅读时链std::hex,就像把它链起来写作一样:

infile >> std::hex >> a;

答案 2 :(得分:6)

这有效:

int main()
{
    const char *filename = "blah.txt";
    ifstream infile(filename, fstream::in);

    unsigned int a;
    infile >> hex >> a;
    cout << hex << a;
}

答案 3 :(得分:0)

还要确保输入文件是使用Hex编辑器而不是常规文本编辑器编写的。 否则,包含字符“a”的文件foo.txt将被读取为0x61并打印为0x61而不是0xa。 Linux的一个很好的Hex编辑器是“Bless”。