2015-06-25 2 views
0

У меня есть struct abc, и я хочу скопировать байты в структурную переменную. Подобно memcpy в C/C++. Я получаю байты над сокетом, и они являются байтами той же переменной struct abc.Как скопировать байты в переменную struct в C#?

[StructLayout(LayoutKind.Sequential, Pack = 1)]  
public struct abc 
{ 
     public int a; 
     public int b; 
     public float c; 
     public char[] d; //30 size 
} 
+7

Это, в основном, хрупкий подход - вы полагаетесь, например, на то, что обе машины являются одинаковыми. Я думаю, вам понадобится также массив символов, который будет «исправлен». Я бы * настоятельно рекомендовал против использования измененных структур, подобных этому, в целом, и определенно против предположения, что представление в памяти на одной машине будет соответствовать другому. –

+0

Посмотрите на методы 'Marshal.PtrToStructure()' и 'Marshal.StructureToPtr()' –

+1

Хотя копирование байтов выполняется быстрее, подумайте о том, чтобы использовать сериализацию/десериализацию для обеспечения согласованности данных при их транспортировке. – Sinatr

ответ

0

Вы можете преобразовать массив байт в вашу структуру следующим образом:

  int size = Marshal.SizeOf(typeof(abc)); 
      IntPtr ptr = Marshal.AllocHGlobal(size); 

      Marshal.Copy(arr, 0, ptr, size); 

      var struct = (abc)Marshal.PtrToStructure(ptr, typeof(abc)); 
      Marshal.FreeHGlobal(ptr); 

структура теперь ваша преобразованная структура. Имейте в виду комментарии, которые были сделаны об этом, хотя (например, порядок байтов)

Смежные вопросы