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