Python網絡編程——主機字節序和網絡字節序之間的相互轉換


If you ever need to write a low-level network application, it may be necessary to handle the low-level data transmission over the wire between two machines. This operation requires some sort of conversion of data from the native host operating system to the network format and vice versa. This is because each one hat its own specific representation of data.

編寫底層低層網絡應用時,或許需要處理通過電纜在兩台設備之間傳送的低層數據。在這種操作中,需要把主機操作系統發出的數據轉換成網絡格式,或者做逆向轉換,因為這兩種數據的表示方式不一樣。

1. 代碼

 1 # 主機字節序和網絡字節序之間的相互轉換
 2 
 3 import socket
 4 
 5 
 6 def convert_integer():
 7     data = 1234
 8     # 32-bit
 9     print("Original: %s => Long host byte order: %s, Network byte order: %s"
10           % (data, socket.ntohl(data), socket.htonl(data)))
11     # 16-bit
12     print("Original: %s => Short host byte order: %s, Network byte order: %s"
13           % (data, socket.ntohs(data), socket.htons(data)))
14 
15 if __name__ == '__main__':
16     convert_integer()

2. ntohl()、ntohs()、htonl()和htons()解釋

 1 def ntohl(integer):  # real signature unknown; restored from __doc__
 2     """
 3     ntohl(integer) -> integer
 4 
 5     Convert a 32-bit integer from network to host byte order.
 6     """
 7     return 0
 8   # 將網絡字節順序轉換成主機字節順序(32bit)
 9 
10 def ntohs(integer):  # real signature unknown; restored from __doc__
11     """
12     ntohs(integer) -> integer
13 
14     Convert a 16-bit integer from network to host byte order.
15     """
16     return 0
17   # 將網絡字節順序轉換成主機字節順序(16bit)
18 
19 def htonl(integer):  # real signature unknown; restored from __doc__
20     """
21     htonl(integer) -> integer
22 
23     Convert a 32-bit integer from host to network byte order.
24     """
25     return 0
26   # 將主機字節順序轉換成網絡字節順序(32bit)
27 
28 def htons(integer):  # real signature unknown; restored from __doc__
29     """
30     htons(integer) -> integer
31 
32     Convert a 16-bit integer from host to network byte order.
33     """
34     return 0
35   # 將主機字節順序轉換成網絡字節順序(16bit)

3.網絡字節順序和主機字節順序解釋

網絡字節順序NBO(Network Byte Order): 按從高到低的順序存儲,在網絡上使用統一的網絡字節順序,可以避免兼容性問題。

主機字節順序(HBO,Host Byte Order): 不同的機器HBO不相同,與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

 4.運行結果

1 Original: 1234 => Long host byte order: 3523477504, Network byte order: 3523477504
2 Original: 1234 => Short host byte order: 53764, Network byte order: 53764

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM