kulinich
@kulinich
С++ программист

Qt типы данных?

При сохранении в файл структуры, например:
struct TEST_STRUCT <br/>
{<br/>
 char descriptor[16];<br/>
 DWORD val1;<br/>
 BYTE val2;<br/>
};<br/>


Я предполагал, что размер ее будет 16 + 4 + 1 = 21 байт, но sizeof(TEST_STRUCT) выдает 24 байта.


1. Почему так?


Мне надо сохранить структуру в файл, которая потом будет читаться приложением, построенным на MFC.

Я решил воспользоваться функциями WinAPI (CreateFile, WriteFile), но все равно последовательность байт, которую я передаю не совпадает с той, которую ожидает MFC-приложение.

Как можно осуществить сохранение структуры с «правильной» последовательностью байт?

Windows XP, MinGW, QtCreator
  • Вопрос задан
  • 5322 просмотра
Решения вопроса 1
@BaJlepa
#pragma pack (push, 1)
struct TEST_STRUCT
{
char descriptor[16];
DWORD val1;
BYTE val2;
};
#pragma pack (pop)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
maxpelevin
@maxpelevin
Java-разработчик
Ответ на «почему?»: структуры и классы в C++ по умолчанию выравниваются в памяти кратно машинному слову, в данном случае 21 округлилось до 24.

Как решить проблему уже ответили.
Ответ написан
hybridcattt
@hybridcattt
Про «почему» — не совсем так. каждая переменная будет округляться до машинного слова. то есть у Вас 16 + 4 + 4.
А если будет BYTE, DOUBLE, BYTE, то в результате будет не 1 + 8 + 1 =10 -> 12, а 4 + 8 + 4 = 16!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы