Про порядок байт

Сопрягая разные железки, никогда не стоит забывать, что у каждого производителя свое королевство со своими правилами.
Если на AVR32 порядок байт — big-endian, то на x86 — интеловский, little-endian.
И, к примеру, тупо заслав от АЦП на cpc108 буфер unsigned short значений каналов, мы получим на процессоре совсем не то, что хотелось бы.
Магическая функция по конвертации из big-endian в little-endian нам поможет.

/*******************************************************************************
* sw16 - перевод 16-бит числа из Big Endian в Little Endian.
* 
* INPUTS: item - значение для перевода.
*
* RETURNS: переведенное 16-бит значение
*/

UINT16 sw16(UINT16 item)
    {
    UINT16 temp = 0x0;
    
    memcpy( (U8 *)&temp+1, (U8 *)&item, 1);
    memcpy( (U8 *)&temp, (U8 *)&item+1, 1);
    
    return (temp);
    }

Похожий бред:

Про порядок байт: 5 комментариев

  1. ох же дрянь, не даёт мне бинарный сдвиг запостить.

    «меньше — больше» подразумевалось как сдвиг влево, аналогичная операция была для старшего байта со сдвигом вправо

  2. Уведомление: swapBytes () на КБ 13

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Protected by WP Anti Spam