Erlang从UDP数据包中获取字符串

时间:2012-06-30 16:16:18

标签: 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>>

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.
我怎样才能获得主机名?

1 个答案:

答案 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).