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-Key: 45568

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

Printed on: April 23, 2024 at 11:04 o'clock

Member: Biber
Biber Nov 28, 2006 at 19:40:19 (UTC)
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
Member: DaSam
DaSam Nov 28, 2006 at 23:17:38 (UTC)
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
Member: Biber
Biber Nov 29, 2006 at 08:44:23 (UTC)
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
Member: r6cdr
r6cdr Nov 29, 2006 at 20:51:31 (UTC)
Goto Top
Besten Dank für Eure Tipps.
Habe mein Problem gelöst.

Steve
Member: Biber
Biber Nov 30, 2006 at 05:34:16 (UTC)
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