PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Hex<>Oct<>Bin<>Dez-Wandler, Binär Zahl einlesen?



Matflasch
20-04-2004, 18:39
Hi,

ich schreibe grad provisorisch ein Programm(Consolenandwendung, C). Bei dem Programm kann man entweder ne Dezimale, Octale, Hexadezimale oder Binaere Zahl eingeben. Das klappt soweit über printf mit %d, %o, %x alles wunderbar. Bei den Binaeren Zahlen gibt es nur ein kleines Problem.
Wie kann man am besten binäre Zahlen einlesen?

Ich habe es bisher simpel gelöst, indem ich die binäre Zahl mit Leerzeichen getrennt eingeben lasse und die Werte mit 8-Scanf anweisungen einlesen. Aber das muss doch noch viel einfacher gehen oder?

Ich hab den Quelltext als Datei angehängt.

Danke schonmal!

peecee
20-04-2004, 18:53
ziemlich schei*** formatiert die Datei oder?

Matflasch
20-04-2004, 19:31
Also bei mir sieht es gut aus....
in wie fern denn schlecht formatiert?

Das wurde im Linux Editor Vi geschrieben, hast du das evtl mit Notepad oder so geöffnet?
Dann ist die Formatierung wirklich nicht gut ;)

in dem fall: http://www.brixoft.com/prodinfo.asp?id=1

peschmae
20-04-2004, 20:47
Ja. Ist ok formatiert.
Oder will er etwa auf den "{ auf neuer Zeile oder nicht"-Krieg anspielen?

Naja, zu C habe ich leider nix zu sagen. Mit C++ würde man das wohl erst mal in nen String lesen und dann mal schauen... (nicht dass ich dazu viel mehr zu sagen hätte ;) man ist halt noch am lernen)

MfG Peschmä

wraith
20-04-2004, 21:08
Du könntest in einen string einlesen und dann mit strtoul arbeiten


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

int main()
{
char input[20];
unsigned long nr;

scanf("%19s",input);

nr = strtoul(input,0,2);

printf("Dec: %lu\n",nr);
printf("Oct: %lo\n",nr);
printf("Hex: %lx\n",nr);
}

panzi
21-04-2004, 11:40
pseudo code:


FUNCTION char2int( CHARACTER sym )
return sym - '0'
END FUNCTION

...

CHARACTER sym;
INTEGER count = 0;
INTEGER number = 0;

WHILE count < 8 AND is_bin_digit( (sym = read_char()) )
number *= 2
number += char2int( sym )
++ count
END WHILE

IF NOT is_bin_digit( sym )
unread_char( sym )
END IF

Sym
21-04-2004, 12:58
Original geschrieben von panzi
pseudo code:


FUNCTION char2int( CHARACTER sym )
return sym - '0'
END FUNCTION

...

CHARACTER sym;
INTEGER count = 0;
INTEGER number = 0;

WHILE count < 8 AND is_bin_digit( (sym = read_char()) )
number *= 2
number += char2int( sym )
++ count
END WHILE

IF NOT is_bin_digit( sym )
unread_char( sym )
END IF


Könntest Du mich da bitte aus dem Spiel lassen... ;)

Matflasch
21-04-2004, 14:37
Hört sich alles ganz gut an, aber sind das die einfachsten möglichkeiten sowas zu realisieren?
Bzw. es soll so einfach wie möglich sein. Das ist nicht direkt für mich und wenn der Lehrer später das Programm sieht, soll er da auch noch durchsteigen ;)

Also möglichst simpel soll das ganze bleiben... oder ich bleib einfach bei meiner möglichkeit ;)

Danke trotzdem für die Vorschläge!

kobi78
07-01-2008, 17:03
Hallo,

hat jemand eine Idee, wie ich diesen Code von wraith( Top gelöst!):

char input[20];

scanf("%19s",input);

b = strtoul(input,0,2);

printf("Dec: %lu\n",b);

so verändern kann, dass mir die Funktion keinen 32 Bit Integer sondern einen __int64 zurückliefert? Sonst gibt es beim Einlesen von Binären zahlen schnell einen Überlauf!

Und wie kann ich das Ausgabefenster in Visual C verbreitern? Meine langen Binärzahlen passen da nicht hinein!?

Vielen Dank!

Gruß

quinte17
12-01-2008, 13:44
ist gibt noch: (zumindest unter linux... bei visual studio weiß ich des nicht)


unsigned long long int
strtoull(const char *nptr, char **endptr, int base);


greetz