У меня есть двоичный файл, который был создан на машине unix. Это просто куча записей, написанных один за другим. Запись определяется следующим образом:
struct RECORD {
UINT32 foo;
UINT32 bar;
CHAR fooword[11];
CHAR barword[11];
UNIT16 baz;
}
Я пытаюсь понять, как я буду читать и интерпретировать эти данные на машине Windows. У меня есть что-то вроде этого:
fstream f;
f.open("file.bin", ios::in | ios::binary);
RECORD r;
f.read((char*)&detail, sizeof(RECORD));
cout << "fooword = " << r.fooword << endl;
Я получаю кучу данных, но это не те данные, которые я ожидаю. Я подозреваю, что моя проблема связана с конечной разницей машин, поэтому я пришел спросить об этом.
Я понимаю, что несколько байтов будут храниться в little-endian на windows и big-endian в среде unix, и я получаю это. Для двух байтов 0x1234 на окнах будет 0x3412 в системе unix.
Является ли endianness влиять на порядок байтов структуры в целом или каждого отдельного члена структуры? Какие подходы я возьму, чтобы преобразовать структуру, созданную в системе unix, в ту, которая имеет одни и те же данные в системе Windows? Любые ссылки, которые являются более глубокими, чем порядок байтов пары байтов, тоже будут хороши!