C Programmierung: Byte einlesen und in Bit ausgeben?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du kannst auch bei %d eine Feldbreite angeben:

char end[2];

while ( 9==scanf( "%1d%1d%1d%1d %1d%1d%1d%1d%1[\n]"
                , &x1,&x2,&x3,&x4,&x5,&x6,&x7,&x8, &end) )

Und lasse das fflush() weg: Bei Input-Streams ist ihr Verhalten undefiniert. Mit den Standardfunktionen clearerr(stdin) und scanf("%*[^\n]") erreichst Du vermutlich das gleiche.

Du solltest die Schleife aber unbedingt bei feof(stdin) abbrechen, denn wenn keine Eingabe mehr kommt, nützt ein weiterer Versuch auch nichts mehr. Testen kannst Du das auf der Kommandozeile mit

echo 1234567 | myProg.exe
Habakuck2 
Fragesteller
 16.01.2020, 15:16

Super vielen Dank hat geklappt

0

Lies das ganze als String ein entferne die Leerzeichen und dann mach das:

uint8_t byte = 0;
for(int i = 0; i < 8; i++)
   if(str[i] == 1)
      byte |= 1 << (7 - i);
   else if(str[i] != '0')
      //Eingabe ist kein Bitmuster

Dann hast du in byte die Zahl stehen die deinem Bitmuster entspricht für die Ausgabe holst du dir die einzelnen Bit wieder über

for(i =0; i < 8; i++)
   printf("%d",(byte >> (7-i)) & 1);
KarlRanseierIII  15.01.2020, 20:20
for(int i=7;i>=0;--i) printf("%d", byte >> i &1);

Wäre doch sicherlich bequemer ;-).

2

Nein, das geht nicht. Weil 1010001 als eine Zahl gelesen werden würde. Du könntest mit getchar() eine Funktion bauen, die 8 Zeichen einzeln liest!

Oder

char buffer[9];
scanf("%s", buffer);

Und dann jedes Zeichen einzeln nach 1 und 0 splitten!

Woher ich das weiß:Studium / Ausbildung – Student der Informatik an der HU Berlin

Was spricht dagegen, die ganze Zahl einzulesen und dann auseinanderzureißen?

Ansonsten könntest du versuchen, Characters statt Integern einzulesen, in etwa:

scanf("%c....%c", &x1, ..., &x8);

...

printf("%d...%d", x1-48, ..., x8-48);