2014-11-19 1 views
0

У меня есть двоичный файл, в котором первая строка содержит метаданные (например, строки 343 столбца 770 ...), которые хранятся в переменных. После этого остальная часть файла содержит короткие ints, соответствующие другим высотам, которые я также хочу сохранить (в этом бите кода я просто тестирую, могу ли я получить одно значение). Мой код:Проблема с чтением короткого int из двоичного файла (C++)

int map[800][800]; 
    string a; 
    int numrows, numcolumns, bytespp, secondspp, lls, tls, min, max, special; 
    ifstream infile; 
    infile.open("usaW70N25D5.dat", ios::binary | ios::in); 
    infile >>a >> numrows >> a>>numcolumns >> a>> bytespp >>a >> secondspp >>a >> lls >> a>> tls >> a>> min >>a >> max >>a >> special; 
    int row = 0; max = 0; 
    cout << numrows << " " << numcolumns << " " << bytespp << " " << secondspp << " " << lls << " " << tls << " " << min << " " << max << " " << special << endl; 

    short int val = 0; 
    infile.read((char*)&val,sizeof(infile)); 
    cout << val<< endl; 

Ошибки я получаю:

Необработанное исключение в 0x52ec6e9f (msvcp100d.dll) в mapproject.exe: 0xC0000005: Нарушение прав доступа чтения местоположение 0xfe0cfe0c.

Где я ошибаюсь в попытке прочитать файл? Я подумал, что, может быть, мне придется переместиться на одну позицию и попытаться:

int spot = infile.tellg(); spot+=1; 
    infile.seekg(spot); 

но это не помогло.

+0

iostreams не для двоичных. 'ios :: binary' фактически не выполняет двоичный ввод-вывод, все это влияет на перевод новой строки. Все остальные кодировки символов и языковые уровни все еще существуют; iostreams не могут работать без грани. И «неформатированные» функции ввода-вывода, такие как 'read', также не обходят эти слои - они находятся в' filebuf', который меньше, чем даже неформатированный ввод-вывод. –

ответ

0

Чтение потока >> не считывает два двоичных байта. Он читает строку символов.

Смежные вопросы