協(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;
}