Sträng till "hex-sträng"?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Sträng till "hex-sträng"?

Inlägg 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...
Användarvisningsbild
Icecap
Inlägg: 26737
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Läs ett tecken åt gången och skriv ut värdet i en sträng.

sprintf(&Buffer[strlen(Buffer)], "%02u",Value);
Användarvisningsbild
exile
EF Sponsor
Inlägg: 496
Blev medlem: 21 oktober 2005, 23:32:07

Inlägg 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...
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Vad gör stjärnorna framför in och out?
Användarvisningsbild
exile
EF Sponsor
Inlägg: 496
Blev medlem: 21 oktober 2005, 23:32:07

Inlägg av exile »

Den här länkenförklarar nog bättre än vad jag gör...
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg 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"?
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg 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
Skriv svar