Как вы все знаете, поскольку это одна из наиболее часто задаваемых тем на SO, у меня проблемы с ошибками округления (на самом деле это не ошибки, я хорошо в курсе). s StrucLayout и FieldOffset Я понимаю, что для представления объединений в C # мне нужно использовать атрибут StructLayout [LayoutKind.Explicit)] и [FieldOffset (x)], чтобы указать смещение байта внутри объединения. Однако у меня есть ...
Я понимаю, что для представления объединений в C # мне нужно использовать атрибут StructLayout [LayoutKind.Explicit)] и [FieldOffset (x)], чтобы указать смещение байта внутри объединения. Однако у меня есть следующий союз, который я хочу представить, а атрибут FieldOffset смещен только размером байта.
union _myUnion
{
unsigned int info;
struct
{
unsigned int flag1:1 // bit 0
unsigned int flag2:1 // bit 1
unsigned int flag3:1 // bit 2
unsigned int flag4:1 // bit 3
unsigned int flag5:1 // bit 4
unsigned int flag6:1 // bit 5
.
.
.
unsigned int flag31:1 // bit 31
}
}
Как вы можете видеть для внутренней структуры в объединении, я не могу использовать FieldOffset, так как мне нужно что-то, что может компенсировать немного.
Есть ли решение этой проблемы? Я пытаюсь вызвать функцию DLL, и одна из структур данных была определена как таковая, и у меня закончились идеи о том, как лучше всего представить эту структуру объединения.