Wert in Binärdarstellung als String darstellen



  • Hallo!

    Ich möchte einen positiven Wert in einen String als Binär darstellen.
    Dazu habe ich folgenden Code geschrieben:

    #include <stdio.h>
    #include <stdlib.h>
    #define STRING_LENGTH 16
    
    char* intToBin(unsigned int value, char* bin) {
    	int i;
    	//Iteriere über die länge des Stringes und werte jedes Bit aus
    	for(i = STRING_LENGTH-1; i>=0; i--) {
    		if(value%2) {
    			bin[i] = '1';
    		}
    		else {
    			bin[i] = '0';
    		}
    		value = value>>1;
    	}
    	return bin;
    }
    
    int aufgabe7b() {
    	unsigned int value = 0;
    	char bin[STRING_LENGTH-1];
    	printf("Bitte geben Sie eine positive Zahl ein: ");
    	fflush(stdout); //damit printf noch vor scanf ausgeführt wird
    	scanf("%d", &value);
    	printf("Die Zahl %d lautet in Binärdarstellung:\n%s", value, intToBin(value, bin));
    
       return EXIT_SUCCESS;
    }
    

    So nun habe ich beim zweiten printf leider 2 Probleme die mir unerklärlich sind:
    1. es wird für value irgendein Wert ausgegeben den ich nicht deuten kann. ZB für 255 wird 49 ausgegeben.
    2. bei dem String bin werden für den Wert 255 16char ausgegeben aber für 256 werden 17char ausgegeben. Wobei der 17te nur ein Rechteck in der Konsole von Eclipse darstellt. Die Binärwerte passen immer.

    Hat jemand eine Idee warum das so ist?

    godi



  • Korrigiere eine Zeile zu:

    char bin[STRING_LENGTH+1]="";
    


  • Danke, aber hat leider nichts gebracht. 😞

    AH, sorry! Funktioniert!
    Habe das + übersehen. 😉

    ich verstehe das jetzt nicht ganz warum ich für ein Array das 16 Elemente beinhaltet mit arr[17] initialisieren muss?

    godi



  • godi schrieb:

    ich verstehe das jetzt nicht ganz warum ich für ein Array das 16 Elemente beinhaltet mit arr[17] initialisieren muss?

    Das ist eine Übereinkunft in C, daß man an Strings am Ende eine '\0' hängt.
    Dadurch können Funktionen wie printf überhaupt erst erkennen, wo Du meinst, daß der String aufhört. Die kriegen nämlich, um genau zu sein, nicht den ganzen String übergeben, sondern nur die Adresse auf's erste Element. Das ist recht praktisch und sehr schnell. Und genau für diese '\0' am Ende hinter Deinen Nutzdaten sollst Du Platz schaffen.

    http://www.c-howto.de/tutorial-strings-zeichenketten-nullterminiert.html

    char* intToBin(unsigned int value, char* bin) {
        int i;
        //Iteriere über die länge des Stringes und werte jedes Bit aus
        for(i = STRING_LENGTH-1; i>=0; i--) {
            if(value%2) {
                bin[i] = '1';
            }
            else {
                bin[i] = '0';
            }
            value = value>>1;
        }
        bin[STRING_LENGTH] = '\0';//ohne das angst ich haben
        return bin;
    }
    


  • 👍 Vielen Dank! 🙂


Anmelden zum Antworten