Перейти к содержанию
    

Преобразование типов WinAVR

Добрый день, уважаемые коллеги.

 

Возникла задача следующего характера: есть число типа int16_t, в WinAVR необходимо создать массив из двух элементов unsigned char, первый элемент - младший байт числа int16_t, а второй - соответственно старший байт.

 

Заранее всем спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

int16_t num;

unsigned char arr[2];

 

arr[0] = num & 0xff;

arr[1] = (num >> 8) & 0xff;

 

Или не портабельный вариант:

 

*((int16_t *)arr) = num;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

int16_t num;

unsigned char arr[2];

 

arr[0] = num & 0xff;

arr[1] = (num >> 8) & 0xff;

 

Или не портабельный вариант:

 

*((int16_t *)arr) = num;

 

 

Большое спасибо!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возникла задача следующего характера: есть число типа 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).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А подскажите пожалуйста как сделать в обратном порядке?

low = num & 0xff;

hi = (num >> 8) & 0xff;

если есть low и hi как получить 16-битное num ?

 

Изменено пользователем Ermol

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А еще вот такой.

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...