2010-08-08 22 views
1

我想將大字節2字節字符串轉換爲數字端口號。我已經得到了一些代碼,但我不知道它是否是正確的:開箱大字節編碼端口號

from struct import unpack 
def unpack_port(big_endian-port): 
    return unpack("!H", big_endian-port)[0] 

的端口(使用Python再版())是\ X1A \ XE1,我也得到6881這一職能的。

這是正確的嗎?

+0

「The form'!'適用於那些聲稱自己不記得網絡字節順序是大端還是小端的窮人。「 - 一點[結構文檔](http://docs.python.org/library/struct.html)幽默。 :) – Seth 2010-08-08 19:01:51

回答

3

是的,'!'是說'網絡字節順序'的字符,而'H'說'16位無符號整數',所以你的代碼是正確的。 6881通常是Bittorrent端口。

在這種情況下,我認爲'!'是正確的字符。由於它是端口號,我希望你的數據來自網絡。但是,如果你知道你的數據由於某種其他原因而成爲big-endian,那麼'>'可能更合適。他們的意思是完全一樣的東西,總是會的。這更多的是通過評論你的代碼來表示意圖而不是任何語義差異。

+0

謝謝。只是不確定我的格式標記是否正確。 – 2010-08-08 19:06:32