#c_sharp #cpp
Всем доброго времени суток, помогите разобраться как прочитать битовое поле из бинарного файла ? Есть структура написанная на C++ Builder : typedef struct { unsigned int nr:8; // unsigned int y:8; // 1 unsigned int sm:3; // 2 unsigned int d:5; // 3 unsigned int m:4; // 4 unsigned int r:4; // 5 } n_def; как я понял мне для начала нужно прочитать весь блок а затем разбить его на биты ? using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open))) { // пока не достигнут конец файла // считываем каждое значение из файла while (reader.PeekChar() > -1) { int numb = reader.ReadInt32(); uint nr = reader.ReadUInt32(); // переменная которую нужно разбить на биты } } на втором поле nr я уже получаю не то что нужно. Как правильнее реализовать задачу ? может лучше использовать другой способ чтения и записи в бинарный файл ? Спасибо за ваши ответы Продолжение темы : Бинарный файл ,простите что выкладываю на обменник просто файл содержит данные с 2004г. А в VS данные такие : nr = 1 y = 16 (совпало) sm = 2 ds = 15 ms = 11 rs = 0
Ответы
Ответ 1
По идее, имеет смысл воспользоваться классом BitVector32. Возьмите вспомогательный класс SectionHelper отсюда. Вам нужно подготовить описание: SectionHelper helper = new SectionHelper(); var nr_s = helper.AllocatedSection(8); var y_s = helper.AllocatedSection(8); var sm_s = helper.AllocatedSection(3); var d_s = helper.AllocatedSection(5); var m_s = helper.AllocatedSection(4); var r_s = helper.AllocatedSection(4); Теперь можно пользоваться. Int32 ndef = reader.ReadInt32(); BitVector32 bv = new BitVector32(ndef); int nr = bv[nr_s]; int y = bv[y_s]; int sm = bv[sm_s]; // ... На запись: BitVector32 bv = new BitVector32(ndef); bv[nr_s] = nr; bv[y_s] = y; bv[sm_s] = sm; // ... Int32 ndef = bv.Data; // и записываете ndef куда надо
Комментариев нет:
Отправить комментарий