将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,实际上是二进制以外的任何格式。

如果你坚持使用二进制格式,那么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);

【讨论】:

感谢您的提示。会试试的。消息是这样构建的:1Byte(MessageType) + 4Byte(JSONLength) + JSONMessage。所以 Byte 只是为了检查我们的 JSON 消息的长度【参考方案2】:

BitConverter::GetBytes Method (Int32) 将整数转换为 4 字节数组。

与 Java 不同,您无法控制输出数组的字节顺序。如果你需要它作为小端或大端,你必须检查BitConverter.IsLittleEndian并在必要时反转数组。

【讨论】:

以上是关于将int写入长度为4的字节[重复]的主要内容,如果未能解决你的问题,请参考以下文章

swift 将任意长度的字节数组转换为Swift Int

C++中long,short,int的具体区别是啥?

字节对齐

SQL中nvarchar类型的默认长度是多少?

UNIQUE INDEX - 指定的键太长;最大密钥长度为 767 字节 [重复]

MySQL int 类型的长度和范围解惑