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? :roll:

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... :roll:

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