Aquarius-Michael
@Aquarius-Michael
Программист и железячник

Как реализовать в структуре данных массив байтов?

Есть такая структура с полями. Все поля имеют структуру. И есть одно поле которое является байтовым массивом.
[FieldOffset(0)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public byte[] Test;

[FieldOffset(0)]
        public Register32 Header;
        [FieldOffset(4)]
        public Register32 NumberPack;
        [FieldOffset(8)]
        public Register32 Command;
        [FieldOffset(12)]
        public Register32 Button;
        [FieldOffset(16)]
        public Register32 Checksum;
        [FieldOffset(20)]
        public Register32 ReserveA0;
        [FieldOffset(24)]
        public Register32 ReserveA1;
        [FieldOffset(28)]
        public Register32 ReserveA2;
        [FieldOffset(32)]
        public Register64 RC0;
        [FieldOffset(40)]
        public Register64 RC1;
        [FieldOffset(48)]
        public Register64 RC2;
        [FieldOffset(56)]
        public Register64 RC3;
        [FieldOffset(64)]
        public Register32 ReserveB0;
        [FieldOffset(68)]
        public Register32 ReserveB1;
        [FieldOffset(72)]
        public Register32 ReserveB2;
        [FieldOffset(76)]
        public Register32 ReserveB3;
        [FieldOffset(80)]
        public Register32 ReserveB4;
        [FieldOffset(84)]
        public Register32 ReserveB5;
        [FieldOffset(88)]
        public Register32 ReserveB6;
        [FieldOffset(92)]
        public Register32 ReserveB7;
        [FieldOffset(96)]
        public Register32 ReserveB8;
        [FieldOffset(100)]
        public Register32 ReserveB9;
        [FieldOffset(104)]
        public Register32 ReserveBA;
        [FieldOffset(108)]
        public Register32 ReserveBB;
        [FieldOffset(112)]
        public Register32 ReserveBC;
        [FieldOffset(116)]
        public Register32 ReserveBD;
        [FieldOffset(120)]
        public Register32 ReserveBE;
        [FieldOffset(124)]
        public Register32 ReserveBF;


Только проблема возникла. Компилятор выдаёт исключение с проблемой выравнивания. Но без данного поля Test работает нормально, выравнивание работает правильно. Но мне нужно чтобы эти все поля разбились на байтовый массив. Проверял для проверки вместо Register32/64 uint и ulong - всё также ошибка.

P.S. Похоже, это возможно только в небезопасном контексте.
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
@Oxoron
Шарпер
Нельзя выравнивать объекты по одному смещению. Структуры можно.
Попробуй буферы фиксированного размера:
public fixed byte Test[256]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы