php與c伺服器的socket通訊,在做資料轉換的時候,php沒有提供對應將網路位元組序和機器字節序相互轉換的程式,但是根據函式的意義,我們可以做相應的轉換來實現這一函式:
function ntohl($str)
函式的意義
程式的作用是將網路位元組序和機器字節序進行相互轉換。在c/c++、python、delphi中都提供了相應的函式「ntohl」和「htonl」,如果是short型別就是「ntohs」和「htons」。下面是這些函式的意義:
ntohl()--"network to host long"htonl()--"host to network long"
htons()--"host to network short"
ntohs()--"network to host short"
什麼是主機位元組序
不同的機器字節序不相同,這與使用的cpu有關。不同的cpu在處理高位位元組時所儲存的順序是不同的。
例如intel x86結構下, short型數0x1234表示為34 12, int型數0x12345678表示為78 56 34 12
如ibm power pc結構下, short型數0x1234表示為12 34, int型數0x12345678表示為12 34 56 78
網路位元組序
正是由於每個主機的處理順序有可能不同,所以在網路協議中規定資料從高到低順序儲存,目的是在不同架構的主機中可以正常通訊,避免相容性問題。
參考:
位元組序和網路位元組序
1 位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big e...
位元組序和網路位元組序
1位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big en...
位元組序與網路位元組序
cpu向記憶體儲存資料的方式有2種,這意味著cpu解析資料的方式也分為2種 0x20號 0x21號 0x22號 0x23號 0x12 0x32 0x56 0x78 整數0x12345678,0x12是最高位位元組,0x78是最低位位元組。因此大端中先儲存最高位位元組0x12,小端序儲存方式如下 0x...