Я пытаюсь прочитать фрагменты данных из файла непосредственно в структуру, но заполнение приводит к чтению слишком большого количества данных и смещению данных.
Должен ли я вручную читать каждую часть в структуре или есть более простой способ сделать это?
Мой код:
Структуры
typedef unsigned char byte;
struct Header
{
char ID[10];
int version;
};
struct Vertex //cannot rearrange the order of the members
{
byte flags;
float vertex[3];
char bone;
byte referenceCount;
};
Как я читаю данные:
std::ifstream in(path.c_str(), std::ifstream::in | std::ifstream::binary);
Header header;
in.read((char*)&header.ID, sizeof(header.ID));
header.ID[9] = '\0';
in.read((char*)&header.version, sizeof(header.version));
std::cout << header.ID << " " << header.version << "\n";
in.read((char*)&NumVertices, sizeof(NumVertices));
std::cout << NumVertices << "\n";
std::vector<Vertex> Vertices(NumVertices);
for(std::vector<Vertex>::iterator it = Vertices.begin(); it != Vertices.end(); ++it)
{
Vertex& v = (*it);
in.read((char*)&v.flags, sizeof(v.flags));
in.read((char*)&v.vertex, sizeof(v.vertex));
in.read((char*)&v.bone, sizeof(v.bone));
in.read((char*)&v.referenceCount, sizeof(v.referenceCount));
}
Я пытался сделать: in.read((char*)&Vertices[0], sizeof(Vertices[0]) * NumVertices);
, но это дает неправильные результаты из-за того, что я считаю отступом.
Кроме того: на данный момент я использую приведения в стиле C, что будет правильным приведением C++ для использования в этом сценарии, или подходит ли приведение в стиле C?