Hi, ich möchte einen Binärzahl z.B. 10101100 in eine dezimale Zahl umwandeln. WIe könnte man dies in ANSI C realisieren?
eigentlich gibst Du im Quellcode an: int k = b10101100; schon hat k den Wert 172 wenn deine BinZahl als String vorliegt, dann int i, value; int nLen; char[9] s; strcpy(s, "10101100"); nLen = strlen(s) for (i = 0; i < nLen; i++) { value += ('1' == s[i]) ? (1 << i) : 0; }
> eigentlich gibst Du im Quellcode an: > int k = b10101100; Das ist kein C; diese Notation ist eine seltene inkompatible Erweiterung weniger Compilerhersteller.
1 | #define B8(y) ( (0##y & 1) \
|
2 | | (0##y >> 2 & 2) \
|
3 | | (0##y >> 4 & 4) \
|
4 | | (0##y >> 6 & 8) \
|
5 | | (0##y >> 8 & 16) \
|
6 | | (0##y >> 10 & 32) \
|
7 | | (0##y >> 12 & 64) \
|
8 | | (0##y >> 14 & 128) )
|
9 | |
10 | unsigned char i = B8(10101100); |
Peter
Ich mit diesen Angaben nichts anfangen. Ich habe die Binär Wert z.B. 1010 in einem String drin. Jetzt weiss ichhalt nur nicht wie da der Algorythmus geht damit ich dies in eine Dez Zahl umwandeln kann.
>> eigentlich gibst Du im Quellcode an: >> int k = b10101100; > Das ist kein C; diese Notation ist eine seltene inkompatible > Erweiterung weniger Compilerhersteller. Selten? Ich habe noch kein Compiler gehabt, der das nicht konnte.
Oder so:
1 | unsigned int getbin( unsigned char *s ){ |
2 | unsigned int val = 0; |
3 | unsigned char i; |
4 | while( (i = *s++ - '0') <= 1 ) |
5 | val += val + i; |
6 | return val; |
7 | }
|
Peter
Ich benötige nur eine Funktion mit der ich z.B. den Binär Wert 1010 in eine Dez Zahl umwandeln kann. So das ich dann den Wert 10 sehen kann.
@Martin Jangowski Martin, man kann dieses seltsame Verhalten immer wieder in diesem Forum sehen. Einer stellt eine Frage, die danach riecht, er haette seine Hausaufgaben nicht gemacht und moechte nun Hilfe von anderen, dann kommt einer und watscht ihn dafuer ab. Mal angenommen, der Fragesteller bemueht sich tatsaechlich und kapierts trotzdem nicht, ist dieses Verhalten dann wirklich angemessen ? Wenn einer nicht antworten will, dann soll er es lassen und nicht den Herrn Oberlehrer spielen, ok ? just my 0,5 Euro
@Alexander Verstehe ich das richtig ? Dein Eingabewert ist ein normaler (null termininierter) C-String a la "0101" und das Ergebnis soll wieder ein C-String sein, der die Dezimalzahl enthaelt (= "5") ? Oder soll die Funktion doch lieber einen integer (= 5) zurueckgeben ? Daz
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.