r6cdr
Goto Top

Binärstring in dezimalen Integer wandeln

Konvertierung in C

Hallo,

ich habe einen String bzw. array of char in dem ein 8bit langer Binärwert steht. Diesen brauche ich als Integer mit dem ich Rechnen kann, also von 00001000 zu 8. Einfach atoi() funktioniert nicht, ist mir auch klar. Gibt es eine Funktion die das kann?

Vielen Dank für Eure Hilfe

Steve

Content-ID: 45568

Url: https://administrator.de/contentid/45568

Ausgedruckt am: 26.11.2024 um 06:11 Uhr

Biber
Biber 28.11.2006 um 20:40:19 Uhr
Goto Top
Moin r6cdr,

wie wäre es mit bin2dec(binarystr) ?
Davon gibt es -zig Beispiel-Implementierungen auch in den Math.lib's (ist so eine typische Erstes-Lehrjahr-Aufgabe).

Eins von Hunderttausenden an Strategiebeispielen zum Selberhäkeln ist hier.

[Edit] Und ein Beispiel, dass Du mit nur zwei Änderungen übernehmen könntest, findet sich hier

Kernstück:
#include <stdio.h>

int bin2dec(char *dec);

int main(void){
.....
	/*rest of code*/
        
	return 0;
}

int bin2dec(char *dec){
	int x=0, temp,total=0;
	while(dec[x]!='\0' || dec[x]!='\n'){  
		if(dec[x]=='1'){  
			temp=pow(x,2);
			total+=temp;
			x++;
		}
		if(dec[x]=='0'){  
			continue;
		}
	}
}
[/Edit]
Gruß Biber
DaSam
DaSam 29.11.2006 um 00:17:38 Uhr
Goto Top
Hola,

ist schon spät und ich wollte auch meinen Compiler nicht mehr anwärmen, aber:

Bist Du sicher, dass Du nicht LSB und MSB vertauscht hast ???

temp=pow(x,2);
sollte doch sowas wie
temp=pow(strlen(dec)-x,2);

heissen?

So, ich hole meine Mütze face-wink

cu,
Alex
Biber
Biber 29.11.2006 um 09:44:23 Uhr
Goto Top
Moin DaSam,

gut aufgepasst... face-wink

Das war ja nur eine der zitierten Implementierungen.

In einem normalen beaverproofed environment würde ich natürlich auch eine Funktion "int bin2dec( char *dec, bool msb_first)" verwenden.
Und dann sinngemäß mit einer for(..) statt einer while()-Schleife so vorgehen:
if (msb_first) 
 {   for (i=0; i<strlen; i++) {
    
       if(dec[i]=='1'){  
            temp=pow(i,2);
            total+=temp;
            i++;
        }
 } else {
 {   for (i=0; i<strlen; i++) {
    
       if(dec[i]=='1'){  
            temp=pow(strlen(i,2)-i,2);
            total+=temp;
            i++;
        }
    }
...

[Nur Skizze, keine einzige Zeile getestet..]

Gruß
Biber
r6cdr
r6cdr 29.11.2006 um 21:51:31 Uhr
Goto Top
Besten Dank für Eure Tipps.
Habe mein Problem gelöst.

Steve
Biber
Biber 30.11.2006 um 06:34:16 Uhr
Goto Top
Moin r6cdr,
Habe mein Problem gelöst.
Wenn Du jetzt noch selbständig einen grünen Haken setzt, ist auch eines unserer immerwährenden Forumsprobleme zumindest teilweise gelöst. face-wink

Grüße
Biber