我使用下面的大小检索了我的结构的大小:
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个字节的空间作为数据包结构。
答案 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转换为字节数组。