В программе, написанной на C++ (Keil) для LPC2366 обнаружилась следующая проблема при работе с массивом:
Вот оптимизированный для просмотра отрывок из программы:
BYTE byData[8] = {0x12, 0x00, 0x0A, 0x00, 0x01, 0x00, 0x02, 0x00}; BYTE* prtBuf = (BYTE*)byData; DWORD dwVal1 = *((DWORD*)(prtBuf)); DWORD dwVal2 = *((DWORD*)(prtBuf + 1)); DWORD dwVal3 = *((DWORD*)(prtBuf + 2)); DWORD dwVal4 = *((DWORD*)(prtBuf + 4));
На выходе получаю следующие значения: dwVal1 = 0x000A0012; dwVal2 = 0x12000A00; dwVal3 = 0x0012000A; dwVal4 = 0x00020001;
Ошибка возникает в значении dwVal2 и dwVal3, т.е. при смещении относительно начала массива, не кратно DWORD. Из-за чего это происходит и можно ли с этим бороться!?
Сообщение отредактировал Yaumen - Nov 9 2009, 14:43
|