День добрый, прошу глянуть на код: Код (Text): #include <iostream> using namespace std; class Data { public: short int CodeObj; //DA float ValueObj; short int status; }; int main() { unsigned char array[8] = {0x90,0x65,0x0,0x0,0x0,0x0,0x01,0x0}; Data * pData = (Data *)(&array); cout << endl << "code:\t" << pData->CodeObj << "\t" << sizeof(pData->CodeObj) << endl; cout << endl << "value:\t" << pData->ValueObj << "\t" << sizeof(pData->ValueObj) << endl; cout << endl << "status:\t" << pData->status << "\t" << sizeof(pData->status) << endl; cout << "sizeof(Data):\t" << sizeof(Data) << endl; return 0; } Последняя строка cout должа вывать 8, а выдает 12! Почему?
Код (Text): code: 26000 2 value: 9.18355e-041 4 status: -64 2 sizeof(Data): 12 Press any key to continue
Visual C++ 6.0 этот код как примерочный, лишь бы заработал а далее подобное но на билдере с++ 6.0. Опции: /nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/proba2.pch" /YX /Fo"Debug/" смею заметить по смотри на результат! Там вместо 0.0 выдалось икс игрек ... ху...
да, без проблем. только пиши правильно: перед своей структурой #pragma pack(push, 1) а потом #pragma pack(pop) в то потом так задалбывает вылавливать баги после включения хидеров с кривыми прагмами, которые забивают на то что они не одни...
Спасибо вам! а то я долго понять не мог че за дурь у меня! но все таки не понятно почему в float типе у меня в первом коде, выдавал не 0.0? Физика?
EvilsInterrupt почему в float типе у меня в первом коде, выдавал не 0.0? Потому что на float пришлись эти байты: 0x0,0x0,0x01,0x0
#pragma pack(push, 1) // #pragma pack(pop) Это конечно правильно. Но коректно работает не под всеми компиляторами. Впервые столкнулся в *nix. А вот pack(1) // pack() проблем не вызывает. И пользоватся этим надо осторожно.
Хм. возможно я поторопился. Ну старые Dos компиляторы "C" могут вообще не понимать pack. Также проверил на машине I386 с FreeBSD 5.4 Release gcc 3.4.2. gcc сказала что эта платформа не поддерживает pack(push,1). Странно.
идеала вообще нет в этой жизни. Ты определись с целевой платформой и компилером - тогде точный совет получишь