解压大端编码的端口号

1 投票
1 回答
1060 浏览
提问于 2025-04-16 02:30

我正在尝试把一个大端字节的2字节字符串转换成一个数字端口号。我已经写了一些代码,但不知道它是否正确:

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

这个端口(用Python的repr()函数显示)是\x1a\xe1,从这个函数我得到了6881。

这样做对吗?

1 个回答

4

是的,'!' 这个符号表示“网络字节顺序”,而 'H' 表示“16位无符号整数”,所以你的代码是对的。6881 通常是一个 Bittorrent 的端口号。

在这种情况下,我认为 '!' 是正确的符号。因为这是一个端口号,我猜你的数据是来自网络的。不过,如果你有其他原因知道你的数据是大端字节序,那么 '>' 可能更合适。它们的意思完全一样,永远都是。主要是看你在代码中注释的意图,而不是语义上的区别。

撰写回答