У меня есть двоичный файл с расширением .b16, содержащаяся в виде целого числа без знака (диапазон 0..65535, расширение файла .b16, порядок байтов: младший / старший байт).
Основными файлами являются otypes03.b08 - otypes08.b08, otypes09.b16 и
otypes10.b16. Они содержат координаты всех неэквивалентных
наборы точек (типы заказов) для заданного числа n точек.
Я успешно прочитал все файлы с расширением .b08, однако, когда дело доходит до чтения файлов .b16, я не получаю ожидаемую информацию.
Что у меня есть на данный момент: (Это модифицированная версия алгоритма чтения, предназначенная исключительно для формата .b16)
int readPoints(int n, string file_name, vector<Point> & vPoints){
ifstream input(file_name, std::ios::binary);
if(input.fail()) return 1;
vector< unsigned char> buffer(std::istreambuf_iterator<char>(input), {});
//Copying each pair of binary points to a vector of Point objects
Point temp;
for( unsigned int i=0;i< buffer.size();i+=4){
temp.x = buffer[i] | buffer[i+1] ;
temp.y = buffer[i+2] | buffer[i+3] ;
vPoints.push_back(temp);
}
return 0;
}
Каждый элемент файла - это координата точки на плоскости, однако кажется, что я читаю неправильно, считанные координаты не являются теми, которые должны быть. Я не знаю, что я делаю не так.
Что я использую для формата .b08:
//Reads a file of binary points and stores it on vector vPoints.
int readPoints(int n, string file_name, vector<Point> & vPoints){
ifstream input(file_name, std::ios::binary);
if(input.fail()) return 1;
// copies all data into buffer
//Stored as unsigned int. Arithmetic operations (+-*/) can be used! :)
//Can be treated as signed int or unsigned int.
vector< unsigned char> buffer(std::istreambuf_iterator<char>(input), {});
//Copying each pair of binary points to a vector of Point objects
Point temp;
cout << "Buffer size: " << buffer.size() << endl;
for( unsigned int i=0;i< buffer.size();i+=2){
temp.x = buffer[i];
temp.y = buffer[i+2];
vPoints.push_back(temp);
}
return 0;
}
Более подробная информация о базе данных, которую я использую, находится здесь:
http://www.ist.tugraz.at/aichholzer/research/rp/triangulations/ordertypes/
Файл, который я пытаюсь прочитать, это otypes09.b16, который составляет 5,7 МБ на тот случай, если вы захотите попробовать его.
Спасибо за ваше время.