| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Една молба, за тези, които пишат на C http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=43 |
Страница 1 от 1 |
| Автор: | Реконструктор [ Сря Окт 06, 2004 10:36 pm ] |
| Заглавие: | Една молба, за тези, които пишат на C |
Има следната структура: struct TableHeader { unsigned char m_nDataOffset; unsigned char m_nTableWidth; unsigned char m_nTableHeight; float m_fPhysicsX; float m_fPhysicsY; unsigned char m_nDivX; unsigned char m_nDivY; unsigned long m_nCheckSum; unsigned short m_nDataSize; }; Вижте, моля ви, какво връща sizeof(TableHeader) на вашия компилатор и какъв е самия компилатор. |
|
| Автор: | Мартин [ Чет Окт 07, 2004 9:24 am ] |
| Заглавие: | |
Microsoft Visual Studio 6.0 ------------------------------ sizeof(unsigned char) = 1 sizeof(float) = 4 sizeof(unsigned long) = 4 sizeof(unsigned short) = 2 sizeof(TableHeader) = 24 (вместо 19, както се получава ако се направи проста аритметика) Разликата идва от това, че при използването на структури всяка променлива заема кратен на 2 брой байтове. |
|
| Автор: | Мартин [ Чет Окт 07, 2004 9:43 am ] |
| Заглавие: | |
Потърсих в Google повече информация, и се оказа че съм поизлъгал. Q: Why returns 'sizeof()' a bigger size than the member variables actually need? A: This is due to structure alignment which aligns the data structure by padding extra bytes so as to optimize for data transfer. http://www.codeguru.com/forum/showthread.php?s=52d39246109637dc59a1b8af29388658&p=866887#post866887 |
|
| Автор: | bateAz [ Чет Окт 07, 2004 11:17 am ] |
| Заглавие: | |
Ми да. Ти к'во очакваш. Сложи флоатовете най-горе, или пък сложи още един чар преди тях и всичко ще си заспи. В краен случай един "dummy" char преди тях. BTW, в Delphi - то можеш да кажеш "packed record", за C не знам може ли. Ако някой знае, да подскаже, да не ни пишат двойка |
|
| Автор: | bateAz [ Чет Окт 07, 2004 11:19 am ] |
| Заглавие: | |
А, не съм го огледал както трябва. Ще трябва и по-долу да ги понаредиш, така да се каже. |
|
| Автор: | Реконструктор [ Чет Окт 07, 2004 11:57 am ] |
| Заглавие: | |
Оправих се. |
|
| Автор: | bateAz [ Чет Окт 07, 2004 12:00 pm ] |
| Заглавие: | |
Ахааа. Ти май се мъчиш да се опитваш да пробваш да правиш комуникация, а ? |
|
| Автор: | Реконструктор [ Чет Окт 07, 2004 12:29 pm ] |
| Заглавие: | |
Аз комуникацията съм я направил отдавна. Бозата се получава от това, че при подравняването VC оставя дупки в структурата, за което gcc няма как да знае. И за това някои от мемберите имаха странни стойности, когато ги четях от ЕЕПРОМ-а. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|