18. marts 2009 - 12:59Der er
14 kommentarer og 1 løsning
Speciel hex konvertering..
Hej Eksperter.
Er der nogen som har en algoritme (helst bare generel, ellers assembly) til at konvertere et hex tal til en hex-repræsentation af det decimale tal. Altså
0x10 -> 0x16 (i dec er det 16->22) 0x47-> 0x71 (i dec er det 71->113)
Det som forvirrer, er 'manglen' på symboler, når grundtallet kommer over 10. Vi vil helst bruge dem vi kender (tallene fra 0..9), men så er vi på den, for de duer ikke fra 10..15. Enten skulle man opfinde helt nye symboler, eller fortsætte med en, i forvejen, kendt 'remse', og her er bogataverne A..F idelle.
arne_v: jeg synes umiddelbart den er svær at oversætte, da jeg ikke har nogle strings i assembler. Jeg kan ikke se andet end at jeg bliver nødt til at have den numeriske repræsentation ud i den anden ende, før det virker. Det her var mit udkast:
Jeg får ganske vist også 174 ud, men det er værdien 174 = 0xAE, og så er jeg jo lige vidt!
Det er AVR assembler jeg roder med, hvis der er nogen som har forstand på det(?), det kunne jo være der var en genvej (guess not), ellers må der være en måde at regne det ud på.
arne_v: Pseudo assembler vil formentlig være godt nok, så VAX assembler er sikkert fint (selvom jeg ikke ved hvordan det ser ud). Jeg kan godt finde ud af at lave et stort lookuptable med 0x00-0x99 som den kan slå op i, men det er ikke super elegant, så hvis du kan trylle et eksempel op ad baglommen skal du endelig ikke holde dig tilbage :).
Efter at have sovet på det, er det gået op mig at idéen med ét stort looktable, som måske ikke ser pænt ud i koden til gengæld må være noget af det hurtigste for processoren. Således:
index val 0x00 0x00 ... .... ... ... 0x09 0x09 0xA0 0x10 0xA1 0x11
etc.. op til 99..
Hvis du har en smartere løsning, paste den endelig. Men lad være med at bruge dage på det :)
Tak for det store arbejde! Du har altså sparet noget flashram, men til gengæld tager det 3 gange så mange cycles at udregne, som hvis man bare slår op i et lookuptable. I mit tilfælde er jeg lidt i tvivl, om din løsning er den bedste, men man kan i hvertfald sige det på denne måde: Hvis det nogensinde skal udbygges drastisk/eller i et lignende større projekt, vil din metode klart være at foretrække, i stedet for at have et lookuptable med eks. i million indexes. Under alle omstændigheder vil jeg gerne give dig points'ne da du har løst opgaven, og lige meget om jeg gør det på denne måde eller med et stort loouptable, kan jeg sagtens forestille mig at der er nogen som bliver glade for din kode (måske ovenikøbet mig selv på et andet tidspunkt :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.