2010-08-08 57 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