Двоичные протоколы в / из .NET (синтаксис C #) - PullRequest
2 голосов
/ 03 марта 2011

Я хотел бы услышать, как вы решите такую ​​задачу программирования !?Каждый тип (OPER = 1 тип) соответствует определенной информации.

Это всего лишь одна из 10 спецификаций с одинаковой структурой.Общий способ создания этих «конвертеров» (протокол) является предпочтительным.

Protocol specification

Ответы [ 2 ]

3 голосов
/ 03 марта 2011

Если вы читаете / пишете это, я бы просто перевел это на уровне Stream, что-то вроде:

int b = source.ReadByte();
if (b < 0) throw new EndOfStreamException();
int operx = b & 15;
int oper = (b >> 4) & 15;            
b = source.ReadByte();
if (b < 0) throw new EndOfStreamException();
int prefix = b & 7;
int reg = (b >> 3) & 31;
b = source.ReadByte();
if (b < 0) throw new EndOfStreamException();
int period = b & 7;
int fas = (b >> 3) & 3;
int tar = (b >> 5) & 7;

Если вы делаете лоты этого, выможет обернуть это во что-то более элегантное, возможно, используя атрибуты для определения смещений - но для 10?Мех ... не стоит того.Написание надежного универсального конвертера - это лотов тяжелой работы.

1 голос
/ 03 марта 2011

Если вы не хотите маскировать и сдвигать биты, вы можете использовать структуру BitVector32. Его метод CreateSection () позволяет разделить до 4 байтов на группы битов, а индексатор затем позволяет читать и записывать значения битов.

...