(short int)の上位バイトと下位バイトの設定に問題があります。私のコードを見てください。番号 1 を返すだけですが、 55 を返す必要があります。
int number = 55;
int mynumber = 0;
//convert short int to char.
char upper = number >> 8;
char lower = number && 8;
//convert char to short int .
mynumber = (mynumber & 0xff00) | lower;
mynumber = (mynumber & 0x00ff) | (upper << 8);
printf("%i",mynumber);