Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Поясните кусочек кода, плиз


Автор: СерегаГоляков 27.4.2011, 07:56
Поясните как это так заполняется "буфер":
Код

               bool[] res;
               FileStream fr = new FileStream( name2, FileMode.Create, FileAccess.Write);
                
                bool[] buf = new bool[f.Length * 8];

                //прочитаем файл побайтно
                for (int i = 0; i < f.Length; i++)
                {
                    byte b = (byte)f.ReadByte();//отсюда поподробнее
                    for (int j = 0; j < 8; j++)
                        buf[i * 8 + j] = (b & (1 << j)) > 0;
                }


и вот в след форе тоже:
Код

//запишем в файл
                for (int i = 0; i < f.Length; i++)
                {
                    byte b = 0;
                    for (byte j = 0; j < 8; j++)//отсюда поподробнее
                        if (res[i * 8 + j]) b |= (byte)(1 << j);
                    fr.WriteByte(b);
                }

Я понимаю, что читаем символы, разбиваем на биты их и в результат записываем и наоборот, но как это так я не пойму.

Автор: neutrino 27.4.2011, 08:51


А в чем вопрос? о_О

Автор: СерегаГоляков 27.4.2011, 10:09
ну вот считали  из файла числа 255 12
и что там выполняется по порядку?

и наоборот:

res =01011001

и что делается дальше?

Автор: Artemon 29.4.2011, 14:51
Цитата(СерегаГоляков @  27.4.2011,  10:09 Найти цитируемый пост)
и что там выполняется по порядку?

Да ничего особенного, просто берем каждый бит (НЕ БАЙТ) и записываем его в массив. Напоминаю что в одном байте 8 бит.

Автор: -Mikle- 29.4.2011, 19:17
Цитата(СерегаГоляков @  27.4.2011,  10:56 Найти цитируемый пост)
buf[i * 8 + j] = (b & (1 << j)) > 0;

Тебе нужно это по операторам расписать, какой что делает? Или то что ты хотел узнать уже ответили?

Вообще задача должна быть очень специфичная, чтобы в ней было необходимо работать с массивом булинов. Каждый bool 4 байта весит, поэтому обычно используют BitArray для таких вещей. Он не хранит каждый бит отдельно, а использует бинарную математику чтобы работать с битами напосредственно в массиве.

Автор: СерегаГоляков 29.4.2011, 19:26
ладно всем спасибо, сам разобрался)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)