Побитовая запись в файл.
От: Grumbler44  
Дата: 16.05.04 15:20
Оценка:
Вопрос: Как можно в C++ писать в файл и читать из него побитово.
Причем надо писать некоторое переменное количество бит.
Re: Побитовая запись в файл.
От: MaximE Великобритания  
Дата: 16.05.04 16:01
Оценка:
Grumbler44 wrote:

> Вопрос: Как можно в C++ писать в файл и читать из него побитово.

> Причем надо писать некоторое переменное количество бит.

Упаковывай биты в байты и записывай байты в файл. При чтении — распаковывай биты из байтов.

Как у тебя представлены биты в программе?

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 alpha
Re[2]: Побитовая запись в файл.
От: Grumbler44  
Дата: 16.05.04 19:05
Оценка:
Здравствуйте, MaximE, Вы писали:

>> Вопрос: Как можно в C++ писать в файл и читать из него побитово.

>> Причем надо писать некоторое переменное количество бит.

ME>Упаковывай биты в байты и записывай байты в файл. При чтении — распаковывай биты из байтов.

ME>Как у тебя представлены биты в программе?

Программа еще в процессе написания, поэтому можно представить как удобнее.
Допустим это char*, __int8*, bool*, разницы существенной нет.
Сейчас это, для простоты, string.
Как тогда можно собрать из 8 ноликов и единичек один байт?
А как разобрать один байт по битам?
Re[3]: Побитовая запись в файл.
От: MaximE Великобритания  
Дата: 16.05.04 20:12
Оценка:
Grumbler44 wrote:

>>> Вопрос: Как можно в C++ писать в файл и читать из него побитово.

>>> Причем надо писать некоторое переменное количество бит.
>
> ME>Упаковывай биты в байты и записывай байты в файл. При чтении — распаковывай биты из байтов.
> ME>Как у тебя представлены биты в программе?
>
> Программа еще в процессе написания, поэтому можно представить как удобнее.
> Допустим это char*, __int8*, bool*, разницы существенной нет.
> Сейчас это, для простоты, string.
> Как тогда можно собрать из 8 ноликов и единичек один байт?
> А как разобрать один байт по битам?

#include <memory.h>
#include <cassert>

typedef unsigned char byte;

byte pack_byte(bool bits[8])
{
    byte result(0);
    for(unsigned i(8); i--;)
    {
        result <<= 1;
        result |= byte(bits[ i ]);
    }
    return result;
}

void unpack_byte(byte b, bool bits[8])
{
    for(unsigned i(0); i < 8; ++i)
    {
        bits[ i ] = (b & 0x01) != 0;
        b >>= 1;
    }
}

int main()
{
    bool bits[8] = { 0, 1, 0, 1, 0, 1, 0, 1 };
    byte b = pack_byte(bits);

    bool bits2[8] = { 0 };
    unpack_byte(b, bits2);

    assert(0 == memcmp(bits, bits2, sizeof(bits)));
}


--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 alpha
Исправлено форматирование. -- ПК
Re[3]: Побитовая запись в файл.
От: Aleks  
Дата: 17.05.04 02:37
Оценка:
Здравствуйте, Grumbler44, Вы писали:

G>Как тогда можно собрать из 8 ноликов и единичек один байт?

G>А как разобрать один байт по битам?

Представь набор битов как двоичное число и переводи его скажем в 16-е т.е. запаковка/распаковка = перевод из одной системы счисления в другую.
P.S. Посмотри инфу по темплайтику bitset в MSDN.
Если ничто другое не помогает, прочтите, наконец, инструкцию!
Re: Побитовая запись в файл. offtopic
От: Димчанский Литва http://dimchansky.github.io/
Дата: 17.05.04 09:06
Оценка:
Здравствуйте, Grumbler44, Вы писали:

G>Вопрос: Как можно в C++ писать в файл и читать из него побитово.

G>Причем надо писать некоторое переменное количество бит.

не архиватор ли пишешь?
Re[4]: Побитовая запись в файл.
От: Azir Беларусь  
Дата: 18.05.04 08:41
Оценка:
Здравствуйте, Aleks, Вы писали:

A>P.S. Посмотри инфу по темплайтику bitset в MSDN.


Что каксается замечания про битовые поля, то наверное имеется ввиду конструкция типа:
union Byte
{
    struct
    {
        unsigned char bit0 : 1,
            bit1 : 1,
            bit2 : 1,
            bit3 : 1,
            bit4 : 1,
            bit5 : 1,
            bit6 : 1,
            bit7 : 1;
    };
    unsigned char byte_;
};


Я думаю, что удобней воспользоваться примером MaximE
Re: Побитовая запись в файл.
От: BOPOH_N Россия  
Дата: 18.05.04 09:24
Оценка: +1
Здравствуйте, Grumbler44, Вы писали:

G>Вопрос: Как можно в C++ писать в файл и читать из него побитово.

G>Причем надо писать некоторое переменное количество бит.

используй std::bitset, для него есть пециализированые операторы ввода\вывода
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re[5]: Побитовая запись в файл.
От: Azir Беларусь  
Дата: 18.05.04 15:24
Оценка:
Здравствуйте, Azir, Вы писали:

A>Что каксается замечания про битовые поля, то наверное имеется ввиду конструкция типа:


Я не прав, перепутал bit field и std::bitset.
Re[6]: Побитовая запись в файл.
От: Aleks  
Дата: 19.05.04 04:56
Оценка:
Здравствуйте, Azir, Вы писали:

A>Здравствуйте, Azir, Вы писали:


A>>Что каксается замечания про битовые поля, то наверное имеется ввиду конструкция типа:


A>Я не прав, перепутал bit field и std::bitset.


"Не надо мешать экзаменатору, когда он отвечает на свой вопрос."
Если ничто другое не помогает, прочтите, наконец, инструкцию!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.