大端存放與小端存放 java網(wǎng)絡編程是大端還是小端?
java網(wǎng)絡編程是大端還是小端?網(wǎng)絡傳輸中使用的大端標記方法,即先傳輸權值較高的數(shù)字,就像先傳輸12、10、2一樣。即使后者輸了,損失也不算太大。小端與機器有關。如果您要封裝一個數(shù)字,比如int,封裝
java網(wǎng)絡編程是大端還是小端?
網(wǎng)絡傳輸中使用的大端標記方法,即先傳輸權值較高的數(shù)字,就像先傳輸12、10、2一樣。即使后者輸了,損失也不算太大。小端與機器有關。如果您要封裝一個數(shù)字,比如int,封裝后應該是big end。您可以調(diào)用htons()或htonl()函數(shù)將其轉換為big end(當然,您也可以用big end的方式封裝它,這會有點麻煩)。在傳輸?shù)倪^程中,當然也是大端,接收的緩沖區(qū)也是大端,但是在讀取int類型時,需要將大端轉換成小端(使用ntohs()函數(shù)或ntohl()函數(shù)),這樣才能讀取原始的數(shù)字??梢韵胂螅绻褂脵C器A和B進行通信,而A和B的終端序列相同,則中間沒有轉換。但這并不是一個好習慣,因為如果移植到機器的另一端序列,那么就需要修改代碼,嚴重破壞設計。所以最好使用這些函數(shù)。
什么是大端模式和小端模式?
判斷計算機是大端還是小端?
small end:數(shù)據(jù)的高字節(jié)存儲在高地址中,數(shù)據(jù)的低位字節(jié)存儲在低位地址中。大端:數(shù)據(jù)的高位字節(jié)存儲在低位地址,低位字節(jié)存儲在高位地址。在一個典型的體系結構中,如果一個字是四個字節(jié),那么小端機從地址到高位的數(shù)據(jù)0x0a0b0c0d的存儲模式是:0x0D、0x0c、0x0b和0x0a。在大端模式下,從地址到高位的數(shù)據(jù)存儲模式是:0x0a、0xb、0x0c和0x0D。在一般的處理器中,arm通常處于大端模式,而x86體系結構處于小型端模式。判斷方法:首先通過讀取同一地址的整數(shù)數(shù)據(jù)和字符數(shù)據(jù)來區(qū)分大端和小端。其次,根據(jù)聯(lián)合體的共享內(nèi)存特性判斷機器類型