У меня есть формат файла (.STL, стереолитография, структура стандартная и не может быть изменена. Не путать со стандартной библиотекой шаблонов), в которой используется структура данных размером 50 байт.Чтение с жесткого диска напрямую приводит к неправильному считыванию данных, так как 50 байтов не кратны 4.
Из всей 50-байтовой структуры мне нужно только 36 из этих байтов.Метод, который я сейчас использую для извлечения данных, состоит в том, чтобы вручную сместить позицию чтения файла до точки, где начинается следующий набор данных, считать 36 байтов во временную переменную и затем вывести данные во временную переменную.в правильную позицию в массиве.
Вот фрагмент кода:
threePoints* output = new threePoints [numTriangles]; // create an array to hold the entire file
threePoints* temp = new threePoints [1]; // temp variable to pull data out of each "cell"
// extract each triangle individualy
for (int i = 0; i < numTriangles; i++)
{
stlFile.seekg (96 + i * 50, ios::beg); //read vertex data and put them into tempoary array
// offset = 80 header + 4 #triangles + 12 normal vector
stlFile.read(reinterpret_cast<char*>(temp), (36)); // read the next 36 data blocks into holder, 3 points * 3 axis * 4 bytes per float
output[i] = temp[0]; // dump values in holder into proper array
}
Этот метод работает, но работает медленно.Как мне сделать это, чтобы сделать его быстрее и эффективнее?
Редактировать: я знаю, что ручное отключение выравнивания байтов решило бы эту проблему, но мне нужно интенсивно использовать полученный массив и многократно повторять его.Мне сказали, что отключение выравнивания байтов может привести к проблемам с производительностью, поэтому я избежал этого.