C-Beginner HEX 2 ACII

Gast #6259
Lesenswert?
• ▲
▼
uint8_t bin2asc(uint8_t byte,uint8_t hi)
{
        if(hi)
                byte >>= 4;
        else
                byte &= 0x0f;
        if(byte>9)
                byte += 0x37;
        else
                byte += 0x30;
        return(byte);
}

Wandelt jeweils das nieder- bzw. höherwertige Nibble eines Bytes in ein 
druckbares Hex-Zeichen (ASCII) um. Muss also zur Umwandlung eines Bytes 
zweimal aufgerufen werden.
Admin Persönliche Seite #6261
Lesenswert?
• ▲
▼
@Markus: Du willst ein Byte hexadezimal darstellen, habe ich das richtig 
verstanden?

Notker's Funktion rufst du einmal mit
  zeichen1 = bin2asc(zahl, 0);
auf (dann bekommst du das erste Zeichen) und das zweite Mal mit
  zeichen2 = bin2asc(zahl, 1);
(zweites Zeichen).

Finde ich etwas umständlich, ich würde es so machen (evtl. mit #define 
in ein Makro packen):

zeichen = zahl + ((zahl > 9) ? 0x37 : 0x30);

Wandelt eine Zahl <= 0xF in das entsprechende Zeichen um. Bei ganzen 
Bytes brauchst du natürlich wieder 2 Zeichen, also:

zeichen1 = zahl + (((byte & 0xF) > 9) ? 0x37 : 0x30);
zeichen2 = zahl + (((byte >> 4) > 9) ? 0x37 : 0x30);
Gast #6262
Lesenswert?
• ▲
▼
erstmal besten dank für eure schnelle hilfe.
also deine lösung andreas finde ich super...:)...
da ich aber noch wenig erfahrung mit C habe weiss ich nicht welche wohl 
die bessere lösung ist. also mit der lösung von unten könnte man jetzt 
sogar einen long int umwandeln.

noch ne frage..was ist true und was ist false hinter dem fragezeichen. 
meiner logik nach müsste der linke der true fall sein.


extern void lcdputnum(unsigned char number)
{
    unsigned char i;

    if (number <= 9)
    {
        i = 0x30 + number;
        lcdputchar(i);
    }

    if (number >= 10 && number <= 99)
    {
        i=number/10;lcdputchar(i+0x30);number-=(i*10);
        lcdputchar(number+0x30);
    }

}
Gast #6265
Lesenswert?
• ▲
▼
oops sorry hatte mich wohl verschaut...
mit mehr meinte ich übrigens das man die version oben leicht erweitern 
kann und zb zu einer int oder long ing oder sonstigen funktion umbauen 
kann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren