1. 程式人生 > >網路傳輸資料要不要轉換大小端位元組序的問題?

網路傳輸資料要不要轉換大小端位元組序的問題?

圖3.7 兩種位元組順序
事實上,對於不同的CPU、不同的作業系統,圖3.7中的兩種位元組順序都是可能的。如果像圖3.7左邊那樣:高位元組在前,低位元組在後,則這種位元組順序稱作為big-endian;如果像圖3.7右邊那樣:低位元組在前,高位元組在後,則這種位元組順序稱作為 little-endian。
表3.1 常見的CPU、作業系統上使用的位元組順序
CPU 作業系統 位元組順序
x86 (Intel、AMD等) 所有 little-endian
DEC Alpha 所有 little-endian
HP-PA NT little-endian
HP-PA UNIX big-endian
SUN SPARC 所有 big-endian
MIPS NT little-endian
MIPS UNIX big-endian
PowerPC NT little-endian
PowerPC 非NT big-endian
RS/6000 UNIX big-endian
Motorola m68k 所有 big-endian
一般來說,我們不用關心位元組順序問題,除非要涉及到跨平臺的通訊和資源共享,比如本章將要介紹的網路程式設計(網路傳輸協議TCP/IP採用的是big- endian)。假設現在要在使用不同位元組順序的機器之間傳輸和交換資料,那該怎麼辦呢?(同樣的資料,不同的機器可能有不同的理解,豈不是有悖初衷!)有兩種方法,一種是全部轉換成文字來傳輸,另一種是雙方都按照某一方的位元組順序來傳輸(這時就有一個不同位元組順序之間的相互轉換問題)。

Socket程式設計中經常採用第二種方法。整個傳輸過程如下:傳送端將本機的資料轉換成網路的位元組順序(呼叫API函式htonl或