slog2 (30.10.2006 22:53, просмотров: 1178)
Толи лыжи не едут, то ли я... Трахаюсь с IAR 4.12 для AVR. Вообщем задачка простая, есть 3 байта unsigned char, b2, b1, b0. Надо упаковать их в один signed long. Так что бит 3 байта b2 это старший бит long, ну и дальше по порядку все байты в сторону уменьшения. Как правильные программисты это делают?
Сдвигать байты оператором << больше чем на 8 бит не получается.
Пробую так:
b_long = (b2*0x1000000)|(b1*0x10000)|(b0*0x100); не работает, между байтами 2 и 1 в b_long возникает перенос в зависимости от знака байта b0.
Пробую так:
unsigned int b32, b10;
b32 =(b2<<8)|b1;
b10 =(b0<<8);
b_long =(b32*0x10000)|b10; все работает.
Не понятно почему первый пример не работает и как вообще это сделать красиво.