PHP的ntohl網路位元組序函式及相關知識

2022-01-31 22:07:29 字數 815 閱讀 3721

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...