代码之家  ›  专栏  ›  技术社区  ›  Joseph Salisbury

解包big endian编码的端口号

  •  1
  • Joseph Salisbury  · 技术社区  · 14 年前

    我正在尝试将一个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 回复  |  直到 14 年前
        1
  •  3
  •   Omnifarious    14 年前

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

    在这种情况下,我相信 '!' 是正确的字符。因为它是端口号,所以我希望您的数据来自网络。但是,如果你知道你的数据是big-endian,因为其他原因, '>' 可能更合适。他们的意思完全一样,而且永远都是。与其说是语义上的差异,不如说是注释代码来表示意图的问题。