代码之家  ›  专栏  ›  技术社区  ›  Simsons

如何将整数赋给3字节的字段?

  •  0
  • Simsons  · 技术社区  · 14 年前

    我已使用大小检索了结构的大小,如下所示:

    int len = Marshal.SizeOf(packet);
    

    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字节,但我只有3字节的空间 tcpCIFSPacket.lengthCIFSPacket 作为数据包结构。

    3 回复  |  直到 13 年前
        1
  •  2
  •   Kikaimaru    14 年前
            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];
    
        2
  •  1
  •   Hans Olsson    14 年前

    看看 BitConverter.GetBytes int 一个字节数组。看到了吗 here 更多信息。

        3
  •  0
  •   Rune Grimstad    14 年前