Erlang从UDP数据包获取字符串

Erlang从UDP数据包获取字符串,erlang,udp,Erlang,Udp,我有这个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>> P= 14-15字节是变量(字节宽度-2) 其中15-18字节是服务器主机名的长

我有这个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>>
P=
14-15字节是变量(字节宽度-2) 其中15-18字节是服务器主机名的长度(字节宽度-4)
19+strlen是服务器的主机名(字节宽度-strlen)

我明白了,所以:

<<_:11/bytes, Players:16/integer-big, Max:16/integer-big, _/binary>> = P.
=P。
50英镑。

如何获取主机名?

您可以改进表达式以获得正确的值。请注意,正如您所说,服务器长度是32位,从外观上看,它似乎是little endian,而不是big endian(请注意名称是7个字节,在本例中为“samp rp”,这些字节的编码是
,这表示little endian(可能您的播放器也是little endian)。此外,您的数字似乎有点不正确。表达式为:

<<_:14/bytes, Players:16/integer-little, HNameLength:32/integer-little, HostNameBinary:HNameLength/binary, _/binary>> = P.

有趣的是,这听起来我很熟悉……:)
HostName = binary_to_list(HostNameBinary).