2017-02-25 88 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并在必要时反转阵列。