bin2gray



  • Hi!
    Ich wende mich an euch, da ich so gut wie nichts zu diesem Thema googlen konnte...

    Ich möchte bin2gray verstehen, allerdings hab ich keine Ahnung wie ich zu einer Ausgabe komme.

    #include<stdio.h>
    
    unsigned int bin2gray(unsigned int bin);   
    
    void main()
    
    {
    	int gray;
    	gray = bin2gray(5);    
    
    	printf("%i",gray);
    }
    

    Ist wahrscheinlich nur ein kleiner Fehler, ich komm allerdings net drauf...?
    Fehlermeldung: error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_bin2gray" in Funktion "_main".

    Danke schon mal im voraus!
    Marvin



  • Du hast die Funktion "bin2gray" zwar deklariert, aber nicht definiert. Was erwartest du? Und was soll "bin2gray" überhaupt für eine Funktion sein 😕


  • Mod

    Deine Frage klingt so, als wäre bin2gray eine Funktion aus einer bestimmten Bibliothek. Jedoch ist bei dir nicht zu erkennen, dass du eine Bibliothek benutzen würdest.
    Mache dich mit den Grundlagen vertraut, wie man in C fremde Bibliotheken benutzt (Benutzung von Headern, richtiges Linken - falls du eine IDE benutzt hat die bestimmt auch Einstellungen dafür). Im Idealfall sollte die Bibliothek auch eine Dokumentation haben, in der Beispiele vorkommen.



  • Oh, achso...
    hab gedacht die ist in der Bib drin!

    Gut dann muss ich die wohl selber schreiben.
    Hab da so ne Aufgabenstellung gefunden, wo Dezimal in Graycode umgewandelt werden soll. Das ganze sollte am Schluss dann so aussehen:

    0   |        |            
      1   |       X|
      2   |      XX|
      3   |      X |
      4   |     XX |
      5   |     XXX|
      6   |     X X|
    
           :
    
    254   |X      X|
    255   |X       |
    


  • Schau dir mal den Artikel bei Wikipedia an, da ist auch ein Beispielcode.
    Edit: Den Beitrag habe ich geschrieben, bevor ich deinen zweiten Post gelesen habe



  • Danke, an sich "verstehe" ich den graycode schon, nur die Ausgabe klappt noch nicht wie gefordert! 🙂

    Hab jetzt versucht die Funktion zu schreiben, allerdings klappt die auch nonet so richtig...

    unsigned int bin2gray(unsigned int bin)
    {
    	unsigned int help1, help2;
    	help1 = bin>>=1;
    	help2 = bin ^ help1;
    	return help2;
    }
    

    Edit:
    Ich depp... jetzt klappts:

    unsigned int bin2gray(unsigned int bin)
    {
    	unsigned int help1, help2;
    	help1 = bin;
    	bin>>=1;
    	help2 = bin ^ help1;
    	return help2;
    }
    


  • Hmm, ich stehe vor meinem nächsten Problem...
    Wie kann ich eine 8stellige Binärzahl in ein Muster umwandeln?
    also:

    00000000 -> |        |            
    00000001 -> |       X|
    

    aus 1 wird 'x'
    aus 0 wird ' '


  • Mod

    Wie liegt denn die Binärzahl vor und wie soll hinterher das Muster vorliegen?



  • Wie meinst du das? Versteh die Frage net so ganz... 🙂

    also durch das bin2gray hab ich einen 8stelligen binärcode, den möchst ich (mit Hilfe einer funktion?!) so umwandeln das halt aus einer 1 ein x wird und aus einer 0 ein Leerzeichen!



  • m4rvin schrieb:

    Wie meinst du das? Versteh die Frage net so ganz... 🙂

    also durch das bin2gray hab ich einen 8stelligen binärcode, den möchst ich (mit Hilfe einer funktion?!) so umwandeln das halt aus einer 1 ein x wird und aus einer 0 ein Leerzeichen!

    Die Frage war, ob als Zahl oder String. Aber vermutlich als Zahl.

    Google mal nach "Zahlensysteme umrechnen". Modulo kann man auch in C nutzen ( % ).
    zB:

    int x = y % 2;



  • Wenn ich das richtig verstehe, liegt die Zahl als Integer vor und du möchtest diese nun entsprechend verändert in einen String schreiben?
    Bei Integern kannst du mit >> um jeweils n Stellen nach rechts verschieben und das niederwertige Bit mit Hilfe des bitweisen Und (&) auf 1 prüfen:

    uint8_t c=/*ein Wert*/; // 8 Bit
    char dest[9]; // Zielstring
    int i,k=0;
    for(i=7,;i>=0;--i)
    {
      dest[k++]=(c>>i) & 1)?'x':' ';
    }
    dest[k]=0; // Nullterminierung
    


  • Also ich komm hier trotzdem net weiter...
    Kann man denn irgendwie aus einer Dezimalzahl eine verwertbare Binärzahl machen?

    Hier nochmal das Problem:
    Ich will eine Funktion schreiben, in der (in einer Schleife) eine Dezimalzahl eingelesen wird. Als Ausgabe möchte ich quasi 8 Stellen Text, also zB X X X XX (10101011).

    Wie kann ich auf die einzelnen Bits zugreifen?
    Habs jetzt mit

    void printbits(unsigned int value, unsigned int width)
    {
    	unsigned char buffer[width];
    	_itoa(value, buffer, 2);
    
    }
    

    versucht...

    EDIT: sry, hab dein Beitrag gar net gesehen... war auf der ersten Seite! 😞


Log in to reply