如何为3个字段分配整数?

时间:2010-07-27 10:32:40

标签: c# .net

我使用下面的大小检索了我的结构的大小:

int len = Marshal.SizeOf(packet);

现在len的值为40.我必须将此40分配给我的Structure的3字节字段。我的结构如下所示:

public struct TCP_CIFS_Packet
        {
           public byte zerobyte;
           public byte[] lengthCIFSPacket;
           public  CIFSPacket cifsPacket;
        }

我尝试分配如下的值:

tcpCIFSPacket.lengthCIFSPacket = new byte[3];
tcpCIFSPacket.lengthCIFSPacket[0] = Convert.ToByte(0);
tcpCIFSPacket.lengthCIFSPacket[1] = Convert.ToByte(0);
tcpCIFSPacket.lengthCIFSPacket[2] = Convert.ToByte(40);

但这似乎不是正确的方法。还有其他方法可以做到这一点吗?

编辑@ ho1和@Rune Grimstad: 使用BitConverter.GetBytes后如下:

tcpCIFSPacket.lengthCIFSPacket = BitConverter.GetBytes(lengthofPacket);

lengthCIFSPacket的大小变为4字节,但tcpCIFSPacket.lengthCIFSPacket只有3个字节的空间作为数据包结构。

3 个答案:

答案 0 :(得分:2)

        int number = 500000;
        byte[] bytes = new byte[3];
        bytes[0] = (byte)((number & 0xFF) >> 0);
        bytes[1] = (byte)((number & 0xFF00) >> 8);
        bytes[2] = (byte)((number & 0xFF0000) >> 16);

        byte[] bytes = BitConverter.GetBytes(number); // this will return 4 bytes of course

编辑:你也可以这样做

        byte[] bytes = BitConverter.GetBytes(number); 
        tcpCIFSPacket.lengthCIFSPacket = new byte[3];
        tcpCIFSPacket.lengthCIFSPacket[0] = bytes[0];
        tcpCIFSPacket.lengthCIFSPacket[1] = bytes[1];
        tcpCIFSPacket.lengthCIFSPacket[2] = bytes[2];

答案 1 :(得分:1)

看看BitConverter.GetBytes。它会将int转换为字节数组。有关详细信息,请参阅here

答案 2 :(得分:0)

您可以使用BitConverter类使用GetBytes方法将Int32转换为字节数组。