char ein oder zweistellig



  • Hi,

    wie möchte gern eine beliebige Zahl in einem Char abspeichern; ist diese Zahl einstellig darf nur eine Stelle verwendet werden ohne eine führnede Null; bei zwei Stellen müssen zwei Stellen natürlich dafür aufgewendet werden.

    unsigned int 0x03; 
    
    //-> char[0] = '0' + 3; 
    
    unsigned int 0x12; 
    
    //-> char[0] = '0' + 1; 
    //-> char[1] = '0' + 2;
    


  • ^^ja, du brauchst pro ziffer ein 'char'
    🙂



  • Wo genau ist denn jetzt das Problem bzw. die Frage? So eine Umwandlung kannste jedenfalls mit itoa oder sprintf machen.



  • +fricky schrieb:

    ^^ja, du brauchst pro ziffer ein 'char'
    🙂

    sorry für meine umständliche Beschreibung...

    Aber wie bekomm ich einfach heraus, dass eine solche Zahl nur eine / oder zwei Stellen beansprucht, wenn ich Zahlen kleiner als 16 ist?

    unsigned int 0x03; 
    
    //-> char[0] = '0' + 3; 
    
    /*
      hier soll nicht char[0] = '0' + 0 und char[1] = '0' + 3 entstehen 
    */
    
    unsigned int 0x12; 
    
    //-> char[0] = '0' + 1; 
    //-> char[1] = '0' + 2;
    
    //im Programmcode sieht dass dann so aus in etwa: 
    
    void funktion(unsigned int zahl)
    {
       char testarray[6]; 
    
       testarray[0] = (zahl >> 28); 
       testarray[1] = (zahl >> 24);
       //usw 
    
       //bei 0x03 will ich aber nicht, dass diese 0 auch gespeichert wird im 
       //array sondern nur die Zahl 3 
    
    }
    

    Gruß



  • Jetzt hab ich die genaue Erklärung: sämtliche Nullen in der int-Zahl an den Positionen 1, 3, 5, 7 will ich nicht im char-Array gespeichert haben

    z.B. 0x030040 muss ich char array heißen 3, 0, 4, 0



  • fragensteller nbr1 schrieb:

    z.B. 0x030040 muss ich char array heißen 3, 0, 4, 0

    Wie ist da die Regel? Lasse die erste 0 weg, lasse die zweite 0 weg? Wohl ehr ein Schreibfehler, denk ich mal.

    Also ich geb dir mal einen Tip für die Auswertung, verUNDe jede Stelle und fange an zu speichen sobald die erste Stelle != 0 ist, z.B. so:

    speichern = eingabe & 0xF0000000
    wenn speicher != 0 -> speichern in char, setzte flag speicherung begonnen
    speichern = eingabe & 0x0F000000
    wenn speicher != 0 OR flag speicherung begonnen = TRUE -> speichern in char, setzte flag speicherung begonnen
    :
    :
    :
    den Code dafür schreib ich dir jetzt nicht



  • vielleicht so?

    void mach_was (int x, char *p)  // ist ist der wert, p zeigt aufs array
    {
      do
      {
        p += sprintf (p, "%x", x>>24);
        x <<= 8;
      } while (x);
    }
    

    🙂


Log in to reply