#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 куда надо
Комментариев нет:
Отправить комментарий