我得到一个UDP数据包,如下所示:
<<83,65,77,80,188,64,171,138,30,120,105,0,0,0,10,0,4,0,0,0,84,101,115,116,15,0,0,0,82,101,122,111,110,101,32,82,111,108,101,80,108,97,121,11,0,0,0,83,97,110,32,65,110,100,114,101,97,115>>
如果我知道我可以删除前11个字节,并且12-13字节包含服务器上的在线玩家数量(字节宽度为2),我该如何解码数据包,我该如何获得这个数量?
UPD
也许我发错了包......
SAMP Query
所以,我发送:
<<$S,$A,$M,$P,188,64,172,136,7808:16,$i>>
对于服务器188.64.172.136:7808,我得到了
<<83,65,77,80,188,64,172,136,30,128,105,0,0,0,10,0,4,0,0,0,84,101,115,116,15,0,0,0,82,101,122,111,110,101,32,82,111,108,101,80,108,97,121,11,0,0,0,83,97,110,32,65,110,100,114,101,97,115>>
答案 0 :(得分:2)
您可以使用bit syntax和聪明的模式匹配来获得结果:
<<_:11/bytes, NumberOfPlayers:16/integer-big, _/binary>> = <<83,65,77,80,188,64,171,138,30,120,105,0,0,0,10,0,4,0,0,0,84,101,115,116,15,0,0,0,82,101,122,111,110,101,32,82,111,108,101,80,108,97,121,11,0,0,0,83,97,110,32,65,110,100,114,101,97,115>>,
NumberOfPlayers.
答案 1 :(得分:1)
如果您的数据包二进制文件存储在P
中,您可以执行类似的操作(假设为大端):
<<NumberOfPlayersOnline:16/big>> = binary:part(P,11,2).
结果位于NumberOfPlayers
。