Я пытаюсь реализовать разные сигналы, содержащие разные данные, и я реализовал различные типы данных в C # для чистого управления данными (в основном структуры, некоторые перечисления). Большинство этих типов имеют странные размеры, например, 9-битные или 3-битные и т. Д.
Я реализовал их как их ближайший эквивалент базового типа C # (большинство из них байтовые, короткие или короткие, с некоторыми целочисленными и целыми числами).
Каков общий способ обработки таких типов данных в C #? В конце я должен объединить все биты в один байтовый массив, но я не уверен, как их объединить.
Я думал о том, чтобы получить байтовый массив каждого типа с помощью BitConverter и поместить все данные как логические значения в BitArray, который я затем смог преобразовать обратно в байтовый массив. Но я не могу разделить массив байтов.
Еще один способ сделать это - сдвинуть каждую переменную, которая у меня есть, но это кажется очень грязным. Если в будущем тип изменится с 32-разрядного на 31-разрядный, это может измениться.
Как это обычно делается? Какие-нибудь лучшие практики или что-то?
В основном я хочу объединить данные разных размеров в один байтовый массив. Например, упакуйте 3-битную переменную, 2-битное логическое и 11-битное значение в 2 байта.
Поскольку у меня есть типы, реализованные как типы C #, я могу сделать BitArray arr = new BitArray(BitConverter.GetBytes((short)MyType))
, но это даст мне 16 бит, в то время как MyType
может иметь только 9 бит.