2

私はこの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 バイトはプレーヤー変数 (バイト幅 - 2) で、15 ~ 18 バイトはサーバーのホスト名の長さ (バイト幅 - 4)
19 + strlen はサーバーのホスト名 (バイト幅 - strlen) です。

私はプレーヤーの変数を取得します:

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

50
です。ホスト名を取得するにはどうすればよいですか?

4

1 に答える 1

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).
于 2012-06-30T17:11:51.767 に答える