binär --> hexadezimal



  • Wie kann ich auf einem Label eine Binärzahl als Hexadezimalzahl ausgeben?

    z.B.:

    unsigned char bin[8]="11111111";

    Label1->Caption= ???

    auf dem Label soll dann FF erscheinen!

    MFG



  • Du wirst vermutlich nicht darum kommen, den String zumindest selbst zu zerlegen (Vierer-Gruppen) und in einen Integer-Wert (bzw. char) umzuwandeln. Dann kannst du IntToHex (bzw. BinToHex) darauf anwenden.



  • Vierergruppen brauchste dafür nicht.
    Es reicht, den String Char für Char durch zu gehen und entsprechend die einsen zu setzen:

    unsigned char Bin2Dec(const char *bin_byte_charp)
    {
        /* Sollte ein Nullzeiger übergeben worden sein, 0 zurückleifern */
        if (bin_byte_charp == NULL)
            return 0;
    
        /* Zu bearbeitender Rückgabewert. */
        unsigned char dec_uchar = 0xFF;
    
        /* Für jedes der 8 Bit den Buchstaben prüfen. */
        for (unsigned char bitnummer_uchar = 0;bitnummer < 8;bitnummer_uchar++)
        {
            /* Wenn der Buchstabe einer Eins entspricht, das passende Bit setzen */
            if (bin_byte_charp[bitnummer_uchar] == '1')
            {
                dec_uchar &= ~(0x02 << bitnummer_uchar);
            }
        }
    
        return dec_uchar;
    }
    

    Achtung: Es ist zwei kleine fehler versteckt, die sich aber mit dem Verständnis für die Funktion einfach finden lassen.

    [edit]Ausserdem hat die Funktion ein paar unschöne Angewohnheiten, wenn es nicht nur 0en und 1en sind die im String stehen. [/edit]


Anmelden zum Antworten