如何一次从文件中读取两个十六进制值

时间:2015-01-13 19:01:34

标签: c++ file fstream ifstream readfile

我正在尝试从文件中读取两个数据,我遇到了两个问题:

  1. 无限循环
  2. 第一个值正确读取,第二个值不正确。
  3. 我尝试过使用getline,但我无法让它正常工作。我已将我的代码包含在c ++,输入文件和下面的正确输出中。

    正确的输出应为:

    Num1 = 4FD37854
    Num2 = E281C40C
    

    我试图从名为input.txt的文件中读取两个数据:

    4FD37854
    E281C40C
    

    这是我的计划:

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    union newfloat{
        float f;
        unsigned int i;
    };
    
    int main ()
    {
    
    // Declare new floating point numbers
    newfloat x1;
    newfloat x2;
    
    // Create File Pointer and open file (destructor closes it automatically)
    ifstream myfile ("input.txt");
    
    while (myfile >> hex >> x1.i) // Read until at EOF
    {
    
    myfile >> hex >> x2.i; // Read input into x2
    
    cout << "Num1 = " << hex << x1.i << endl;
    cout << "Num2 = " << hex << x2.i << endl;
    
    } // end of file reading loop
    return 0;
    }
    

2 个答案:

答案 0 :(得分:3)

while (!myfile.eof())几乎总是错误的,并且会比您预期的时间多读一次。

你应该说

while(myfile >> hex >> x1.i >> x2.i)

但主要问题是E281C40C无法读入int,您需要unsigned int

这也是你无限循环的原因 - 因为在到达文件末尾之前读取失败!myfile.eof()保持为真,并且读数仍然失败。
这是避免eof()的另一个原因。

答案 1 :(得分:0)

所以,让我们看看第二个问题。

  
      
  1. 读取的第二个值由于某种原因读错了。
  2.   

嗯,这实际上是输入问题。您输入的是0xE281C40C,而int的最大值是0x7FFFFFFF。您只需将newFloat的定义更改为:

即可
union newfloat{
    float f;
    unsigned int i;
};

它将接受大于0x7FFFFFFF的值

  
      
  1. 无限循环
  2.   

我不知道为什么会这样,而且我的机器上没有发生这种情况。但是,在你解决了第二个问题后,你的机器上可能不会发生这种情况。