Ошибка записи массива в структуру - C#

Узнай цену своей работы

Формулировка задачи:

Привет! Как записать массив в структуру, в которой поле помечено как fixed? Ошибка 1 Использование буферов фиксированного размера, содержащихся в нефиксированных выражениях, невозможно. Попробуйте использовать оператор fixed. Структура выглядит так:
 [StructLayout(LayoutKind.Explicit, Pack = 1, Size = 16)]
        public unsafe struct GetData
        {
            
            [FieldOffset(0)]
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
            public fixed Byte DATA[16];

            [FieldOffset(0)]
            public UInt32 P1;
            [FieldOffset(4)]
            public UInt32 P2;
            [FieldOffset(8)]
            public UInt32 P3;
            [FieldOffset(12)]
            public UInt32 P4;
        };
Заполняем ее так:
USART.GetData bigUART = new USART.GetData();
for (int i = 0; i < 16; i++) bigUART.DATA[i] = (Byte)Data[i];
Соответственно, ошибка: Ошибка 1 Использование буферов фиксированного размера, содержащихся в нефиксированных выражениях, невозможно. Попробуйте использовать оператор fixed.

Решение задачи: «Ошибка записи массива в структуру»

textual
Листинг программы
using System;
using System.Runtime.InteropServices;
 
namespace NETExperiments
{
    [StructLayout(LayoutKind.Explicit)]
    public unsafe struct GetData
    {
        [FieldOffset(0)]
        public fixed Byte Data[16];
 
        [FieldOffset(0)]
        UInt32 P1;
        [FieldOffset(4)]
        UInt32 P2;
        [FieldOffset(8)]
        UInt32 P3;
        [FieldOffset(12)]
        UInt32 P4;
    }
 
    class Program
    {
        static unsafe void Main(string[] args)
        {
            GetData bigBytesUART = new GetData();
 
            for (int i = 0; i < 16; i++)
            {
                bigBytesUART.Data[i] = (byte)i;
            }
 
            Console.ReadKey();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы