2011-03-12 20 views
1

私は少し前に書いたC++プログラムからコードを書き直そうとしていますが、バイト配列に正しく書き込むことができないかどうか、または何か他のものを使用している。 C#.NETに変更しようとしているコードは以下の通りです。UDPパケットを正しく書き込む方法

unsigned char pData[1400]; 
bf_write g_ReplyInfo("SVC_ReplyInfo", &pData, 1400); 

void PlayerManager::BuildReplyInfo() 
{ 
    // Delete the old packet 
    g_ReplyInfo.Reset(); 

    g_ReplyInfo.WriteLong(-1); 
    g_ReplyInfo.WriteByte(73); 
    g_ReplyInfo.WriteByte(g_ProtocolVersion.GetInt()); 
    g_ReplyInfo.WriteString(iserver->GetName()); 
    g_ReplyInfo.WriteString(iserver->GetMapName()); 
} 
+0

さらに検索した後、BinaryWriterとMemoryStreamが見つかりました。すべてが機能しているようです。 Write()のために使用するオーバーロードを指定できないので、私は手動でlongとshortをバイトに変換する必要がありますか? –

答えて

0

BinaryWriter文字列が、私は、クライアントが処理することができなくなります疑う前の7ビットの符号化長、と書かれているが、うまくいくかもしれません。おそらく文字列をバイトに変換してから、長さの単語を追加するか、0で終わらせる必要があります。

手動で数字をバイトに変換する必要はありません。 byteとして書きたいlongがある場合は、キャストしてください。つまり、BinaryWriterbwであれば、bw.Write((byte)longval);と書くことができます。 -1を長く書いてください:bw.Write((long)(-1))

+0

ありがとう、それはかなり意味がある、私はそれを考えていたと思う。私はちょうどbw.Write(-1)とbw.Write( "これのような文字列");それは少なくともクエリに応答しました。情報は正しくフォーマットされておらず、正しく表示されませんでした。バイト/ロング/ショートに値をキャストし、文字列をバイト配列にキャストしてヌルで終了させたので、もう機能しません。おそらく最高のこの新しい投稿をするには、難しいコメントにコードを貼り付け、ありがとう! –

関連する問題