В C# я создаю несколько разных структур, которые содержат 16 переменных типа bool. У меня будет несколько разных этих структур, которые затем будут объединены с другими типами данных в более сложные структуры. Мне нужно, чтобы они обрабатывались как 2 байта в длину. В приведенном ниже коде, переменная создана типа CtrlWord1 даст длину 64, когда я сделать Marshal.SizeOf независимо от того, создается со значением обновления от 0, 1 или 2.C# StructLayout Pack = ?? для использования с значениями bool
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct CtrlWord1
{
public bool a1;
public bool a2;
public bool a3;
public bool a4;
public bool a5;
public bool a6;
public bool a7;
public bool a8;
public bool b1;
public bool b2;
public bool b3;
public bool b4;
public bool c1;
public bool c2;
public bool c3;
public bool c4;
}
Упаковка/раскладка выполняется на уровне байта. Это означает, что bool никогда не займет меньше байт, полагаясь исключительно на упаковку. Вам нужно будет сделать что-то более активное, например, использовать два частных байтовых поля и несколько свойств, которые относятся к соответствующим битам в этих байтах. –
Вы можете использовать [BitVector32] (https://msdn.microsoft.com/en-us/library/system.collections.specialized.bitvector32.aspx), чтобы получить до 32 бит. Или вы можете использовать технику, описанную в http://stackoverflow.com/questions/4107039/bitarray-alternative-for-the-net-micro-framework/4107287#, но используйте 'ushort', а не' long'. –