網(wǎng)絡(luò)傳輸是大端還是小端 java網(wǎng)絡(luò)編程是大端還是小端?
java網(wǎng)絡(luò)編程是大端還是小端?網(wǎng)絡(luò)傳輸中采用的大端標(biāo)記法,也就是說(shuō)先傳比較高權(quán)值的數(shù)字, 就像 12一樣,先傳10,在傳2,就算丟了后面一個(gè),損失也不是太大。小端就跟機(jī)器有關(guān)了。你在封裝一個(gè)int之
java網(wǎng)絡(luò)編程是大端還是小端?
網(wǎng)絡(luò)傳輸中采用的大端標(biāo)記法,也就是說(shuō)先傳比較高權(quán)值的數(shù)字, 就像 12一樣,先傳10,在傳2,就算丟了后面一個(gè),損失也不是太大。小端就跟機(jī)器有關(guān)了。你在封裝一個(gè)int之類的數(shù)字,封裝進(jìn)去之后就應(yīng)該是大端的了,可以調(diào)用里面的 htons() 或者h(yuǎn)tonl()函數(shù)來(lái)轉(zhuǎn)化成大端的(當(dāng)然你也可以自己按照大端的方式封裝,就會(huì)麻煩一點(diǎn)而已)。傳輸過(guò)程中當(dāng)然也是大端的,接受到的buffer里面當(dāng)然也是大端的,但是你在讀取這個(gè)int類型的時(shí)候,就需要相應(yīng)的將大端轉(zhuǎn)化為小端了(采用ntohs() 函數(shù)或ntohl()函數(shù)來(lái)實(shí)現(xiàn)),這樣你讀取到的就是原來(lái)的數(shù)字??上攵偃缒阌脵C(jī)器A和B通信,而且A和B的端序都是一樣的話,中間自然就不用轉(zhuǎn)換來(lái)轉(zhuǎn)換去了。但是這不是好習(xí)慣,因?yàn)榧偃缫浦驳搅硗舛诵虻臋C(jī)器的話就需要修改代碼笭害蒂轎酈計(jì)墊襲叮陋。所以最好還是用那幾個(gè)函數(shù)。