проверил на дэсктопе код
char ch[8] = {1,2,3,4,5,6,7,8};
uint16_t n = *(reinterpret_cast<uint16_t*>(ch + 1));
в результате n = 770, т.е. т = 0x0302, то что доктор прописал. Процессор i7, винда7, 64х. без всяких прагм заработало.
Запустил этот код на девайсе с процессором AT91SAM7S256 (ARM архитектура) - на строке с reinterpret_cast процессор завис. печалька.
Ну да ладно.... SAM7 наверно мифический.... собрал такой код в UC-8410 (процессор Intel XScale IXP435, ARM-архитектура)
int main()
{
std::cout << "n= " << std::endl;
char ch[8] = {1,2,3,4,5,6,7,8};
uint16_t n = *(reinterpret_cast<uint16_t*>(ch + 1));
std::cout << "n = " << (int)n <<std::endl
Запускаю.... смотрю выхлоп
root@gp1:/home/juvf# ./test2
n=
n = 258
от куда 258? должно быть 0х0302, что есть 770.
.... а 258 - это есть 0х0201. Как так?! Я же указывал адрес ch + 1, и reinterpret_cast работает строго с указанным адресом...... так так так... пробуем исправить положение прагмой..... а не вышло.... выхлоп такой же... 258 вместо 770.