Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Побитовая запись [си]

39K
04 июня 2009 года
d1mon
8 / / 30.09.2008
Каким образом в файл можно записать один бит ?
5
04 июня 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: d1mon
Каким образом в файл можно записать один бит ?

А вас не смущает тот факт, что минимальная адресуемая ячейка памяти в компьютере имеет размер в 8 бит (1 байт)? С файлами как бы также. Меньше 8 бит записать в файл не получится, более того, минимальный объем данных, записываемый в файл варьируется в зависимости от файловой системы. Файл, содержащий 1 байт данных будет занимать на диске несколько больше места (4КБ например).

87
04 июня 2009 года
Kogrom
2.7K / / 02.02.2008
Можно поменять биты в существующих байтах с помощью побитовых операторов и сдвигов. Можно применять битовые поля в структурах. Но в любом случае, это будет настройка определенного бита в символе или байте.

Ну, ради юмора, можно наваять свою виртуальную файловую систему...
39K
04 июня 2009 года
d1mon
8 / / 30.09.2008
Тогда какая получается выгода записи побитно если в итоге мы получаем байт. К примеру я хочу закодировать символ A и обозначаю его битом 1 в итоге я все равно получу байт 00000001 ?
5
04 июня 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: d1mon
Тогда какая получается выгода записи побитно если в итоге мы получаем байт. К примеру я хочу закодировать символ A и обозначаю его битом 1 в итоге я все равно получу байт 00000001 ?

Коды пакуются и в одном байте может оказаться несколько символов.

39K
04 июня 2009 года
d1mon
8 / / 30.09.2008
дак каким образом можно записать побитно этот бит в файл ?
попустим есть структура
 
Код:
struct {
unsigned 1bit : 1;
unsigned 2bit : 1;
unsigned 3bit : 1;
unsigned 4bit : 1;
unsigned 5bit : 1;
unsigned 6bit : 1;
unsigned 7bit : 1;
unsigned 8bit : 1;
} byte;

каким образом эту структуру загнать в файл ?
87
04 июня 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: d1mon
каким образом эту структуру загнать в файл ?


Тут наверно преобразование типов пройдет или лучше воспользоваться union (как - в поиск). Но я делаю по другому. Например, есть символ

unsigned char ch = 0xFF; // или 0x00 или еще какой - не важно

тогда для обнуления в нем первого бита используем ch & (~0x01), а для установки первого бита ch | 0x01.

Если нужно поменять не первый бит, то сдвигаем единичку влево с помощью оператора <<

9.3K
14 июня 2009 года
iridum
175 / / 26.08.2007
Цитата:

каким образом эту структуру загнать в файл ?



Код:
#include<stdio.h>

#pragma pack(push, 1) //выравнивание
struct Byte
{
    unsigned bit1 : 1;
};
#pragma pack(pop)

int main(int argc, char **argv)
{
    Byte byte;
    FILE *filehandle = NULL;

    byte.bit1 = true;

    filehandle = fopen("file.bin", "wb"); //режим wb
    if(!filehandle)
        return 0;
    if(!fwrite(&byte, sizeof(byte), 1, filehandle))
        return 0;
    if(filehandle)
        fclose(filehandle);
return 1;
}
14
15 июня 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: d1mon

каким образом эту структуру загнать в файл ?


взять все биты, объединить в байты, дополнить до целого и записать.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог