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 :D

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.