Довольно некорректно, промежду прочим.
Цитата
unsigned char curr_pos_msb=195;
unsigned char curr_pos_lsb=80;
curr_pos = curr_pos_lsb + curr_pos_msb<<8;
Потому чта операции будут выполнены в таком порядке:
сдвиг char'овой curr_pos_msb на 8 бит влево (при этом она ессно обнулится);
суммирование curr_pos_lsb и предыд. строки;
копирование в curr_pos;
Лучше, IMHO, сделать так:
Код
unsigned char c_curr_pos[2];
unsigned int curr_pos;
// прямое копирование - из int в char
memcpy(c_curr_pos, &curr_pos, 2);
// обратное копирование - из char в int
memcpy(&curr_pos, c_curr_pos, 2);
Указатель с char не беру, ибо он объявлен как массив, что есть тот же указатель.
Если это будут 2 объявленные последовательно переменные, тогда первую разадресуйте.
Или ручками:
Код
// прямое
c_curr_pos[0] = (curr_pos>>8)&0xFF;// msb
c_curr_pos[1] = curr_pos&0xFF;// lsb
// обратное
curr_pos = c_curr_pos[0];
curr_pos <<= 8;// здесь мы двигаем число в inte, поэтому значение не умрет, как в chare
curr_pos |= c_curr_pos[1];