Gast
#6258
hi hat jemand ne idee wie ich in c am besten eine hex Zahl in ein ACII zeichen wandeln kann? es geht sich eigentlich nur um Zahlen 0-255.
|
Anzeige
|
C-Beginner HEX 2 ACII
Gast
#6258
hi hat jemand ne idee wie ich in c am besten eine hex Zahl in ein ACII zeichen wandeln kann? es geht sich eigentlich nur um Zahlen 0-255.
Gast
#6259
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.
Gast
#6260
mhh..dann muss ich also erst mein byte in high und low zerlegen und dann übergeben? @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
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
#6263
mit der lösung von andreas ist nach einem byte ende. mit deiner kann man jetzt mehr auflösen. @Markus: Links vom Doppelpunkt steht das Ergebnis für true, rechts davon das für false. @BAB: Nein. Der Unterschied ist, dass Markus' Version keine Hexadezimal- sondern eine Dezimalzahl anzeigt. Die Funktion nimmt auch nur unsigned char als Parameter.
Gast
#6265
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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|