Sida 1 av 1
Sträng till "hex-sträng"?
Postat: 30 augusti 2006, 20:19:43
av FS
Om jag tex. har en sträng som innehåller:
s1[] = "ABCDE"
och vill omvandla den till:
s2[] = "4142434445" dvs. motsvarande ascii-värden. Finns det då något fiffigt sätt att lösa det på?
Skriver c för Atmels AVR...
Postat: 30 augusti 2006, 20:44:25
av Icecap
Läs ett tecken åt gången och skriv ut värdet i en sträng.
sprintf(&Buffer[strlen(Buffer)], "%02u",Value);
Postat: 30 augusti 2006, 21:51:37
av exile
Tja eller så här ^^
Kod: Markera allt
void acsii2hex(char *in, char *out)
{
unsigned char t1, t2;
while(t1 = *in){
in++;
t2 = (t1 >> 4) + '0' + 6;
if (t2 & 0x40) t2 += 'A'-'0';
t2-=6;
*out = t2;
out++;
t2 = (t1 & 0x0f) + '0' + 6;
if (t2 & 0x40) t2 += 'A'-'0';
t2-=6;
*out = t2;
out++;
}
*out = 0;
}
Kanse inte så läsbar men blir ganska liten...
Postat: 30 augusti 2006, 22:22:03
av FS
Vad gör stjärnorna framför in och out?
Postat: 30 augusti 2006, 22:41:14
av exile
Den här
länkenförklarar nog bättre än vad jag gör...
Postat: 30 augusti 2006, 23:28:49
av FS
Ok, lite pekare alltså...
Jag får det dock inte att fungera.
om jag kör:
char hex[] = "";
ascii2hex("A", hex);
får jag att
hex[0] = 0x00
hex[1] = 0x06
borde jag inte få:
hex[0] = 0x34
hex[1] = 0x31
dvs. hex = "41" ascii för A
Eller är jag ute och cyklar nu?
Icecap: Vad gör &-tecknet framför första Buffer? Och vad gör "%02u"?
Postat: 30 augusti 2006, 23:54:28
av FS
Hmm egentligen är det nog detta jag vill göra fast åt andra hållet...
http://www.elektronikforumet.com/forum/ ... hp?t=12695
Edit: Nu fungerar det, tack för all hjälp...
uint8_t a, high, low;
a = temp
;
high = a >> 4; // split byte in high and low
low = a & 0x0F;
if(high > 9)
high = high + 55; // A-F
else
high = high + 48; // 0-9
if(low > 9)
low = low + 55; // A-F
else
low = low + 48; // 0-9