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...
Sträng till "hex-sträng"?
Tja eller så här ^^
Kanse inte så läsbar men blir ganska liten...
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;
}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"?
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"?
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
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
