将int写入长度为4的字节[重复]
Posted
技术标签:
【中文标题】将int写入长度为4的字节[重复]【英文标题】:Write int into byte with the length of 4 [duplicate] 【发布时间】:2017-02-25 14:50:02 【问题描述】:我们正在编写一个聊天应用程序。我的朋友正在做服务器。为了让服务器读取我的消息,我必须以字节为单位发送消息,前 1 个字节是消息类型,后 4 个字节是消息长度。在 Java 中,可以选择执行以下操作:ByteArray.allocate(4).putInt(length)。在c#中有什么等价的吗?
我尝试过的:
static byte[] DecimalToByteArray(decimal src)
using (MemoryStream stream = new MemoryStream(4))
using (BinaryWriter writer = new BinaryWriter(stream))
writer.Write(src);
return stream.ToArray();
【问题讨论】:
decimal
和这个问题有什么关系?以及为什么需要使用decimal
?
对于那些认为这个问题经过充分研究的人 - 您使用的搜索引擎不符合标准 - bing.com/search?q=c%23+int+to+byte+array
【参考方案1】:
我会认真地恳请您放弃以二进制形式发送和接收消息的想法,并使用一些文本格式,例如 xml、json,实际上是二进制以外的任何格式。
如果你坚持使用二进制格式,那么BinaryWriter
和MemoryStream
方法就可以了。
如果出于某种原因你不喜欢这样,那么你可以试试这个:
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);
【讨论】:
感谢您的提示。会试试的。消息是这样构建的:1Byte(MessageType) + 4Byte(JSONLength) + JSONMessage。所以 Byte 只是为了检查我们的 JSON 消息的长度【参考方案2】:BitConverter::GetBytes Method (Int32) 将整数转换为 4 字节数组。
与 Java 不同,您无法控制输出数组的字节顺序。如果你需要它作为小端或大端,你必须检查BitConverter.IsLittleEndian
并在必要时反转数组。
【讨论】:
以上是关于将int写入长度为4的字节[重复]的主要内容,如果未能解决你的问题,请参考以下文章