解压缩大端编码端口号

时间:2010-08-08 18:49:08

标签: python networking endianness

我正在尝试将big-endian 2字节字符串转换为数字端口号。我已经有了一些代码,但我不知道它是否正确:

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

端口(使用Python repr())是\ x1a \ xe1,我从该函数中获得了6881。

这是对的吗?

1 个答案:

答案 0 :(得分:3)

是的,'!'是表示'网络字节顺序'的字符,而'H'表示'16位无符号整数',因此您的代码是正确的。 6881通常是Bittorrent端口。

在这种情况下,我认为'!'是正确的字符。由于它是端口号,我希望您的数据来自网络。但是,如果您因某些其他原因知道您的数据是大端的,'>'可能更合适。他们的意思完全相同,而且永远都是。更多的是评论您的代码以表明意图而不是任何语义差异。