2017-02-25 3 views
2

チャットアプリケーションを作成しています。私の友人はサーバーをやっています。そしてサーバが私のメッセージを読むためには、私は最初の1バイトがメッセージタイプで、2バイト目がメッセージ長であるバイトでメッセージを送る必要があります。 Javaでは、このようなことを行うオプションがあります:ByteArray.allocate(4).putInt(length)。それに相当するものはC#にありますか?intを長さ4のバイトに書き込みます。

static byte[] DecimalToByteArray(decimal src) 
{ 
    using (MemoryStream stream = new MemoryStream(4)) 
    { 
     using (BinaryWriter writer = new BinaryWriter(stream)) 
     { 
      writer.Write(src); 
      return stream.ToArray(); 
     } 
    } 
} 
+0

'decimal 'とは何が関係していますか?そしてなぜあなたは 'decimal'を使う必要がありますか? –

+0

この質問をよく検討している人々のために、使用している検索エンジンが嗅ぎタバコではない - https://www.bing.com/search?q=c%23+int+to+byte+array –

答えて

0

を、私はあなたがバイナリでメッセージの送受信のアイデアを終了すると、本当に、XML、JSON、バイナリ以外のもの、のようないくつかのテキスト形式を使用することを真剣に懇願するだろう:私が試してみました何

バイナリ形式の使用を強くお勧めする場合は、BinaryWriterMemoryStreamのアプローチは問題ありません。

どんな理由であれ、あなたがそれを好きではない、場合、あなたはこれを試すことができます。

byte[] bytes = new byte[5]; 
bytes[0] = messageType; 
bytes[1] = (byte)(messageLength & 0xff); 
bytes[2] = (byte)((messageLength >> 8) & 0xff); 
bytes[3] = (byte)((messageLength >> 16) & 0xff); 
bytes[4] = (byte)((messageLength >> 24) & 0xff); 
+0

ありがとう先端。試してみる。メッセージは、1Byte(MessageType)+ 4Byte(JSONLength)+ JSONMessageのように作成されます。 ByteはJSONメッセージの長さをチェックするだけです – TheWaII

1

4バイトの配列に整数に変換BitConverter::GetBytes Method (Int32)があります。

Javaとは異なり、出力配列のエンディアンを制御することはできません。リトルエンディアンまたはビッグエンディアンとして必要な場合は、BitConverter.IsLittleEndianをチェックし、必要に応じて配列を逆にする必要があります。

関連する問題