bstream, побитовый вывод

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Borodenok
Сообщения: 1
Зарегистрирован: 13 май 2011, 21:22

Добрый вечер, форумчане.
такая проблемка, не могу сообразить как выводить побитово наоборот,т.е. выводит например 0110101, а надо 1010110...
буду очень признателен)

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>

typedef struct
{    
    FILE *f;
    unsigned char c;
    int pos;
    char md;
}  BSTREAM;

int getbit(BSTREAM*s)
{
    if(s->pos>5)
    {
      int ch;
      ch=getc(s->f);
      if(ch==-1)
	return -1;
      s->c=ch;
      s->pos=0;
    }
    int r;
    r=(s->c>>s->pos)&1;
    s->pos++;
    return r;
}

BSTREAM * bopen(FILE *f,const char*mode)
{
    BSTREAM*s;
    if((s=malloc(sizeof(BSTREAM)))==NULL)
    return 0;

    s->pos=0;
    s->md=mode[0];
    s->c=0;
    s->f=f;
    return s;
}


int main()
{
    int b=0;
    int i=7;
    BSTREAM *s = bopen(stdin,"r");
    while(1)
    {
        b=getbit(s);
       
        printf("%d",b);
        
        if(b==-1)
        break;
    }

printf("%d\n",b);
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Если анализ битов для обычного вывода делается через правый сдвиг, то для инверсного вывода - через левый.

Код: Выделить всё

int nValue = GetSomeValue();
while (nValue != 0)
{
   int nShiftedValue = nValue << 1;
   int nRestoredValue = nShiftedValue >> 1;
   std::cout << (nValue == nShiftedValue) ? 0 : 1;
   nValue = nShiftedValue;
}
P.S. Твой код не стал разбирать в деталях, так как не понял, как ты собираешься прикрутить туда инверсный бинарный вывод, так что просто ответил на вопрос.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить