我有这个udp数据包:
P = <<83,65,77,80,188,64,172,85,30,144,105,0,0,0,50,0,7,0,0,0,115,97,109,112,45,114,112,11,0,0,0,149,78,87,149,82,80,149,118,50,46,50,11,0,0,0,83,97,110,32,65,110,100,114,101,97,115>>
14-15字节是玩家var(字节宽度 - 2)
15-18字节是服务器主机名的长度(字节宽度 - 4)
19 + strlen是服务器的主机名(Byte width - strlen)
我得到了球员var:
<<_:11/bytes, Players:16/integer-big, Max:16/integer-big, _/binary>> = P.
这是50.
我怎样才能获得主机名?
答案 0 :(得分:3)
您可以改进表达式以获取正确的值。请注意,服务器长度,如你所说的,是32位,从它看起来,它似乎是小端,而不是大端(注意名称是7字节,在这种情况下“samp-rp” ,这些字节的编码是<<7,0,0,0>>
,表示小端(也许你的玩家也是小端)。而且,你的数字似乎有点偏。然后表达式为:
<<_:14/bytes, Players:16/integer-little, HNameLength:32/integer-little, HostNameBinary:HNameLength/binary, _/binary>> = P.
然后,可以使用binary_to_list
:
HostName = binary_to_list(HostNameBinary).