需求:做到一個項目,單片機讀取兩個字節,這兩個字節組成一個補碼表示的兩字節整形值。在單片機端,只是把這兩個字節寫到一個字符串中,發向上位機。
分析:首先在java中,涉及byte、short和char類型的運算操作首先會把這些值轉換為int類型,然后對int類型值進行運算,最后得到int類型的結果。
但是在這個問題中,低字節一定是正的,因此低字節跟0xff進行與運算,使得高位都歸零,也即
0x0000 00ff (有0xff擴展得到)
0xFFFF FFFF (由l(byte)擴展得到,因為byte是有符號的,但是低位數據實際上是無符號的)
=0x0000 00ff
對於高位數據
要保持其符號位,因此直接左移一個字節即可,最后相加,拼接完畢。
byte h=(byte)0xff; byte l=(byte)0xFF; short a = (short)(l & 0xff+h*256);