Samsungs 0 30 марта, 2010 Опубликовано 30 марта, 2010 · Жалоба Добрый день, уважаемые коллеги. Возникла задача следующего характера: есть число типа int16_t, в WinAVR необходимо создать массив из двух элементов unsigned char, первый элемент - младший байт числа int16_t, а второй - соответственно старший байт. Заранее всем спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 30 марта, 2010 Опубликовано 30 марта, 2010 · Жалоба int16_t num; unsigned char arr[2]; arr[0] = num & 0xff; arr[1] = (num >> 8) & 0xff; Или не портабельный вариант: *((int16_t *)arr) = num; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Samsungs 0 30 марта, 2010 Опубликовано 30 марта, 2010 · Жалоба int16_t num; unsigned char arr[2]; arr[0] = num & 0xff; arr[1] = (num >> 8) & 0xff; Или не портабельный вариант: *((int16_t *)arr) = num; Большое спасибо!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 31 марта, 2010 Опубликовано 31 марта, 2010 · Жалоба Возникла задача следующего характера: есть число типа int16_t, в WinAVR необходимо создать массив из двух элементов unsigned char, первый элемент - младший байт числа int16_t, а второй - соответственно старший байт. Еще вариант: union { int16_t value; int8_t array[2]; } slon; slon.value = 12345; int8_t low = slon.array[0]; int8_t high = slon.array[1]; int16_t num; unsigned char arr[2]; arr[0] = num & 0xff; arr[1] = (num >> 8) & 0xff; Или не портабельный вариант: *((int16_t *)arr) = num; Первый вариант тоже не полностью портабельный (в случае влияния endian). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ermol 0 25 января, 2011 Опубликовано 25 января, 2011 (изменено) · Жалоба А подскажите пожалуйста как сделать в обратном порядке? low = num & 0xff; hi = (num >> 8) & 0xff; если есть low и hi как получить 16-битное num ? Изменено 25 января, 2011 пользователем Ermol Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 25 января, 2011 Опубликовано 25 января, 2011 · Жалоба 16bit_num = (hi << 8) | low; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ermol 0 25 января, 2011 Опубликовано 25 января, 2011 · Жалоба спасибо! оперативно =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kojevnikov 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба А еще вот такой. struct Struct_IntToByte { unsigned char m_ByteLo; unsigned char m_ByteHi; } int16_t num; struct Struct_IntToByte* h_IntToByte; // Получение доступа h_IntToByte = (struct Struct_IntToByte*)# // Использование h_IntToByte->m_ByteLo; h_IntToByte->m_ByteHi; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться