2017-02-25 85 views
2

我們正在編寫一個聊天應用程序。我的朋友正在做服務器。並且爲了讓服務器讀取我的消息,我必須以字節發送消息,其中第一個1字節是消息類型,第二個4字節是消息長度。在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

BitConverter::GetBytes Method (Int32)該整數轉換爲4個字節數組。

與Java不同,您無法控制輸出數組的字節順序。如果您需要它作爲小端或大端,您必須檢查BitConverter.IsLittleEndian並在必要時反轉陣列。