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