android串列埠通訊接受自定義協議資料並解析問題

2021-08-28 02:58:15 字數 1153 閱讀 5112

串列埠傳輸介面底層是按位(bit)傳送的,上層是按byte傳送和接收的,但協議為了方便描述,每個byte用十六進製制數(0x00~0xff)表示,範相當於十進位制的0~255,而byte為八位且是有符號型別,相當於十進位制的-128~127,明顯0x8f~0xff(128~255)是不能準確轉換為byte的,咋辦?

byte b = 0xff;
編譯器會提示出錯,因為0xff被當作255整數處理,255超過了byte(-128~127)的範圍,不能直接賦值,那咋辦?強轉啊!

byte b = (byte) 0xff;
這樣就沒問題了,但此時你會不會覺得這樣寫就和協議想傳送0xff的想法不匹配了呢,我明明想發個255來著,那我告訴你,你乙個乙個位元組的發,每個位元組就只能是-128~127,不能在其他範圍,所以強轉的目的是你可以傳送這個0xff的前提,傳送的值肯定不是255,具體是啥:

public class main 

}

-1

255process finished with exit code 0

可見,實際上是乙個-1,但接受端為了表達這是個傳送端傳送給我的是0xff(255)而不是-1,你可以通過取到該位元組值後 「 該值 & 0xff」轉為無符號值即255.

一.接收到資料是不固定的長度,協議是起始是aa aa    結束是de d0

接收到的資料有可能是aa aa 08 56 82 44 de do

二.接受到資料是不固定的長度,協議的起始a0 55  第三個位元組為協議長度,結束位元組是傳送資料的異或校驗值,

列如:a0 55 04 51 00 00    55 a0 55 04 53 00 01 56

結束位元組是前面各個位元組異或後的值:

/**

* 異或校驗和

* @param data

* @return

*/public static byte getxor(byte data)

}eventbus.getdefault().post(sb.tostring());

sb.setlength(0);}}

} catch (ioexception e) }}

}

android 串列埠通訊

因為工作需要,從未接觸過串列埠的我被老闆欽定了.查了幾天資料之後,終於搞出了乙份能用的demo 是別人寫好的,對android serialport api 的乙個依賴.接入這個依賴之後,照著提示去做基本就可以搞定了.需要注意的是,如果你接收到的資料不完整,可能是你使用的串列埠被占用了 我自己開發的...

android串列埠通訊

串列埠通訊 serial communications 的概念非常簡單,串列埠按位 bit 傳送和接收位元組。串列埠用於ascii碼字元的傳輸。通訊使用3根線完成,分別是地線 gnd 傳送 tx 接收 rx 由於串列埠通訊是非同步的,埠能夠在一根線上傳送資料同時在另一根線上接收資料。其他線用於握手,...

android 串列埠通訊選擇

問題描述 android晶元一般使用arm的,都支援串列埠通訊,google有乙個專案專門用來支援串列埠開發的 android serialport api,參考自 上圖中用與android與串列埠裝置通訊的方案有四種 第一種是直接用sdk的bluetoothsocket類來進行藍芽通訊,外部裝置再...