2012-06-30 3 views
2

У меня есть этот пакет: UdPErlang получить строку из пакета 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 байт игроки вар (ширина Byte - 2) 15-18 байт этого является длина имени хоста сервера (ширина Byte - 4)
19 + StrLen это имя хоста сервера (ширина Byte - StrLen)

Я получаю игроков вар так:

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

это 50.
Как получить имя хоста?

+0

Интересно, этот звук мне знакомый ... :) –

ответ

3

Вы можете улучшить выражение, чтобы получить правильные значения. Обратите внимание, что длина сервера, как вы выразились, составляет 32 бита, и, по внешнему виду, кажется, что он немного ведомый, не большой endian (обратите внимание, как это имя равно 7 байтам, в данном случае «samp-rp» .., и кодирование этих байтов <<7,0,0,0>>, что указывает на Little Endian (может быть, ваши игроки также немного обратный порядок байт) Кроме того, ваши цифры кажутся немного от экспрессия бы тогда:

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

затем имя хоста может быть преобразовано в строку из двоичного кода с binary_to_list:

HostName = binary_to_list(HostNameBinary). 
Смежные вопросы