字節(jié)流協(xié)議解析的總結(jié)

協(xié)議部分內(nèi)容和解釋

image.png
1. 通信都是以字節(jié)流的形式傳輸

比如上述協(xié)議第一個(gè)字節(jié)表示“故障恢復(fù)標(biāo)識(shí)”。

2. 因?yàn)槭亲止?jié)即byte格式的,那么這些字節(jié)里面的數(shù)據(jù)是如何表示它們內(nèi)容的,程序中如何去解析這些字節(jié)

比如,序號(hào)1故障恢復(fù)標(biāo)識(shí),用一個(gè)字節(jié)表示,編碼規(guī)則為:1.發(fā)生故障。2.故障消除。

那么它的意思是這個(gè)字節(jié)實(shí)際上是數(shù)字類型,是無(wú)符號(hào)的整形。為了節(jié)省長(zhǎng)度用了1個(gè)byte表示了。如果用int表示就需要4個(gè)字節(jié)了。

程序收到協(xié)議的包的時(shí)候,我們應(yīng)該這么處理: 1 byte ->int。轉(zhuǎn)換后的int類型的值應(yīng)該是1或者2。1.發(fā)生故障。2.故障消除。

那么反推制作這個(gè)協(xié)議包的時(shí)候應(yīng)該這么處理:int ->1 byte

java需要注意的問(wèn)題是,它沒(méi)有無(wú)符號(hào)整形。如果C、C++傳輸過(guò)來(lái)是無(wú)符號(hào)的類型,如果java默認(rèn)轉(zhuǎn)成有符號(hào)整形就會(huì)有問(wèn)題。

下面給出類型轉(zhuǎn)換函數(shù):

//1、byte與int轉(zhuǎn)換
    public static byte intToByte(int x) {
        return (byte) x;
    }

    public static int byteToInt(byte b) {
        //Java 總是把 byte 當(dāng)做有符處理;我們可以通過(guò)將其和 0xFF 進(jìn)行二進(jìn)制與得到它的無(wú)符值
        return b & 0xFF;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容