В приведенном ниже примере кода C # у меня есть массив байтов, который был прочитан из сокета. Я хочу проанализировать данные в различных полях exampleClass (первые 8 байтов в 64-битной переменной field1, следующие 4 байта в 32-битной переменной field2 и т. д.)
using System;
namespace CsByteCopy
{
class Program
{
class ExampleClass
{
public UInt64 field1;
public UInt32 field2;
public UInt16 field3;
public byte[] field4 = new byte[18];
}
static void Main(string[] args)
{
byte[] exampleData =
{
// These 8 bytes should go in 'field1'
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
// These 4 bytes should go in 'field2'
0x08,0x09,0x0A,0x0B,
// These 2 bytes should go in 'field3'
0x0C,0x0D,
// These 18 * 1 bytes should go in 'field4'
0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
};
ExampleClass exampleClass = new ExampleClass();
// Perform copy
}
}
}
Прошло много времени с тех пор, как я в последний раз использовал C, но, если я правильно помню, мне, возможно, удалось бы обойтись одним вызовом memcpy () для заполнения всех полей в классе. Какой самый эффективный способ заполнение полей exampleClass в C #?