【问题标题】:How to read hex values from a file using fstream in c++?如何在 c++ 中使用 fstream 从文件中读取十六进制值?
【发布时间】:2011-02-18 11:23:51
【问题描述】:

正如标题所说,如何使用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";
  }

有人可以帮我解决这个问题吗?我必须用空格分隔我想读取的每个十六进制值吗? 因为infile &gt;&gt; hex &gt;&gt; setw(1) 不起作用..

【问题讨论】:

  • 这与十六进制值无关。你的错误在别处。
  • 在问到这里之前,在谷歌上搜索。我相信你会找到这个琐碎问题的答案
  • @gcc 我在谷歌上搜索过,但对我的情况没有用..
  • @etarion 你是对的,但我还有一个问题请帮助我:|
  • @gcc:有时很难在“文本框”中表达您的查询。因此,最好在这里问它。此外,您最终可能会收到损坏的链接或不正确的信息。该站点由活跃的社区支持。因此,即使可以使用 Google 找到相同的答案,这里的答案也更有价值。

标签: c++ fstream


【解决方案1】:

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

int n;
cin >> hex >> n;

【讨论】:

  • std::hex 和 hex 是一样的 :)
【解决方案2】:

这行得通:

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

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

【讨论】:

  • @gcc:没必要;析构函数会隐式执行此操作。
【解决方案3】:

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

infile >> std::hex >> a;

【讨论】:

  • 感谢您的回答!我已经尝试过了,但它也不起作用:(
  • @ardiyu:确实有效。 ideone.com/qs2Z5 像你一样在单独的行上使用 std::hex 也可以。你的错误在别处。
  • @etarion @Nekresh 你们说得对,它成功了!但我有另一个问题,请查看更新并帮助我:|
【解决方案4】:

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

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 我的意思是使用十六进制编辑器——不管是哪一个。因此,该链接在我的回答中是可选的。这只是一个建议。不过我明白你的意思。谢谢。
猜你喜欢
  • 2015-05-01
  • 2015-12-09
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 2011-10-07
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多