Sida 1 av 1
hex till ascii converter avr gcc
Postat: 5 juli 2007, 23:00:29
av lizerdboy
någon som sitter på en hex till ascii converter till avr gcc
skulle behöva en för att kunna printa ut ett värde på en lcd,
som de blir nu så skriver den bara ut ascii tecknet som värdet pekar på.
vill ha variablarna
variabel1 = 0x20 = vilket är hexvärdet jag vill komvertera.
variabel2 = 0 = ska vara hundra delen av hex värdet fast i decimalt
variabel3 = 3 = tiondelen
variabel4 = 2 = en delen , eller vad de nu heter =).
0x20 hex blir 32 decimalt.
någon som vet ??
Thanks // Micke
Postat: 5 juli 2007, 23:16:25
av sodjan
Enklast är upprepade subtraktioner, dock inte snabbast.
Det skriver du snabbt ihop, om du inte vill vänta på något
färdigt...
Postat: 6 juli 2007, 07:15:59
av Icecap
Jag uppfattar det som att du har en hex-sträng du vill konvertera och det är ganska enkelt, man gör som med decimala tal:
1: Nolla 'Resultat' ('Resultat' väljs efter största värdet som kan användas)
2: Sätt en pekare till första siffer.
3: 'Resultat' = 'Resultat' * talbas, här 16. (decimalt alltså 10)
4: 'Mellanresultat' = karaktär - '0'
(4A: om('Mellanresultat' > 9) 'Mellanresultat' = 'Mellanresultat' - 'A' - '0' + 1, fäller vid HEX)
5: 'Resultat' = 'Resultat + 'Mellanresultat'
6: Flytta karaktärpekare
7: om(fler karaktärer finns) gå till punkt 3
klart.
Kod: Markera allt
unsigned long Hex2Dec(char * String)
{
unsigned long Result;
unsigned char Misc;
Result = 0;
while(*String) // Repeat untill EOS
{
Result <= 4; // Multiply by 16
Misc = *String - '0'; // Read character and subtract ASCII-part
if(Misc > 9) Misc -= 'A' - '0' + 1; // It's 'A' - 'F', adjust value
Result += Misc; // Add value of character
String++; // Point on next char
}
return(Result);
}
Postat: 6 juli 2007, 08:34:23
av $tiff
Jag vet inte riktigt om jag fattade dig rätt, men funktionen itoa(...) omvandlar variabler till strängar i godtycklig talbas mellan 2 och 16. Funktionen är standard i avr-libc.
Postat: 8 juli 2007, 12:03:56
av lizerdboy
tackar tackar,
båda itoa och sprintf Funka fint, men sprintf tar #"%&!"# mycket utrymme,
vad är de som är fördelen med sprintf ??
med itoa kam man få fram octal, dec, hex i ascii format ekelt och utrymmessnålt med =), Me like
vad kan man göra mer med string.h ??
är ganska grön innom C , fast de går riktigt bra för de

Postat: 8 juli 2007, 13:05:46
av $tiff
Knalla in på
AVR libc hemsida och ladda ner "user manual". Bläddra fram till string.h och njut av alla finesser
Vad sprintf har som du kommer sakna förr eller senare i itoa är exempelvis padding med nollor så att man kan sätta konstant längd på sina utskrifter. Sprintf är över lag smidigare eftersom man kan hantera en lång utskrift på en snygg C-rad på ett överskådligt sätt. Kostnaden är allt programminne den käkar upp, det är fritt att välja.