2016-11-15 76 views
0

我试图使用>>操作符将格式化的十六进制数据读入无符号整数。我正在使用的代码是ifstream >>再次读取相同的行

这个工作在一个300行的文件就好了,但是当我尝试在一个不同的文件,它读取5日线反复然后赛格故障,我想不通为什么。前五个行是

FD2C FF EB 
4FE9 FF 32 
276E FF 6E 
5C09 FF A3 
7739 FF 36 

的问题的行是

7739 FF 36 

任何帮助理解。谢谢!

编辑:

我修改了代码,以便它看起来像

#include <iostream> 
#include <fstream> 

int main(int argc, char** argv) 
{ 
    ifstream in(argv[1]); 
    unsigned int addr; 
    unsigned int op; 
    unsigned int data; 
    while (in >> hex >> addr >> hex >> op >> hex >> data) 
    { 
    cout << addr << " " << op << " " << data << '\n'; 
    } 
    return 0; 
} 

这解决了一遍又一遍读5日线问题又来了,但它仍然出现segfaults,尽管另一条线路上。我会进一步观察,看看我是否可以把它放下。

回答

-2

FF是新的页面符号,然后是美元符号$,它是36,也许它认为36是指向某物的指针。尝试将unsigned int更改为unsigned char。

编辑:这读取所有内容没有问题,输出是在十六进制值祝你好运。

#include <iostream> 
#include <fstream> 

int main(int argc, char** argv) 
{ 
std::ifstream in; in.open("tst.tst",std::ios::in); 
unsigned char addr; 
unsigned char op; 
unsigned char data; 
while (in >>std::hex>> addr>>std::hex>> op>>std::hex>> data) 
{ 
    std::cout << (int)addr <<std::hex << " " << (int)op<<std::hex << " " << (int)data<<std::hex<< "\n"; 
    } 
    return 0; 
}