Göra om ett decimalt tal till hex i C

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Hempe
Inlägg: 132
Blev medlem: 8 januari 2004, 17:23:19
Ort: Sundbyberg
Kontakt:

Göra om ett decimalt tal till hex i C

Inlägg av Hempe »

Programmerar en PIC i C och använder CCS PIC C kompilator. Det jag vill göra är att göra om ett decimalt tal jag har i en variabel till dess hexadecimala värde på ett enkelt sätt. Kommer inte på något smart sätt nu. Vore tacksam för lite hjälp
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Inlägg av karlstedt »

Vill du ha det hexadecimala värdet i en sträng eller vad?
Hempe
Inlägg: 132
Blev medlem: 8 januari 2004, 17:23:19
Ort: Sundbyberg
Kontakt:

Inlägg av Hempe »

Ja, det är det jag vill
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

Inlägg av Rymdninja »

antar att det är ett heltal du vill manipulera

void foo(int decimalTalet)
{
unsigned char buffer[128];
sprintf(buffer,"%x",decimalTalet);
//Nu har du talet i hexadecimal form i buffer :)
//gör vad du vill med det
}

voila :)


Edit: hoppas bara att sprintf finns i din c-kompilator...
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

"%x" ger a-f i gemener, "%X" ger A-F i versaler..... Kan vara trevligt att veta.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Men en buffer på 128 tecken !?
Verkar väll lite i överkant, är det inte ?
J10
Inlägg: 531
Blev medlem: 6 december 2004, 15:25:30

Inlägg av J10 »

man printf

http://www.die.net/doc/linux/man/man3/printf.3.html

lite knepigt att läsa om man inte är van vid man-sidor men där står allt man kan tänkas behöva veta om funktionen
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jooo..kanske....men det kan ju vara så att man vill printa ut mer än just det hexadecimala värdet.
Hempe
Inlägg: 132
Blev medlem: 8 januari 2004, 17:23:19
Ort: Sundbyberg
Kontakt:

Inlägg av Hempe »

Tack för hjälpen, det löste sig med Rymdninjas förslag. Tänkte även på sidan som J10 länkade till, är det standard som gäller för alla kompilatorer?
Användarvisningsbild
flippy
Inlägg: 110
Blev medlem: 10 december 2005, 13:49:44

Inlägg av flippy »

Det funkar på alla kompilatorer som stöder ANSI C
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Jag har faktiskt aldrig använt mig av sprintf ;)

har gjort egna funktioner för det...lite overkill va!?? måste nog läsa om ANSI C biblioteket
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Overkill eller inte, ofta kan man säkert göra en effektivare
och mindre lösning själv för ett specifikt fall.

Jag gissar att om man använder sprintf, så länkas det in
stöd för allt som sprintf kan göra i den aktuella kompilatorn.

Eller också är den smart nog att rensa bort kod som inte behövs,
det är inte alltid så lätt att veta.

Men har man gott om programminne (och maskincykler),
så spelar det väll mindre roll...
henkebenke
Inlägg: 516
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Det är sant att sprintf (och printf för den delen) drar med sig en del. Men i alla kompilatorer jag sett (för mcu) har olika varianter med reducerat stöd för datatyper och formattering. Så om man bara ska skriva ut intar i decimal eller hex-form så kan man komma ganska billigt undan.

Och man kan ta för givet att de som gjort c-libbarna har bättre kunskaper om både kompilatorn och hårdvaran än vad man själv har. Så gör det så enkelt som möjligt för dig och använd lib-funktioner om de gör det du vill göra. (Förutom kanske flyttal då ;))
Skriv svar