Sida 1 av 1
Göra om ett decimalt tal till hex i C
Postat: 11 december 2005, 18:07:26
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
Postat: 11 december 2005, 18:27:43
av karlstedt
Vill du ha det hexadecimala värdet i en sträng eller vad?
Postat: 11 december 2005, 18:33:20
av Hempe
Ja, det är det jag vill
Postat: 11 december 2005, 19:09:00
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...
Postat: 11 december 2005, 20:30:30
av Icecap
"%x" ger a-f i gemener, "%X" ger A-F i versaler..... Kan vara trevligt att veta.
Postat: 11 december 2005, 21:00:43
av sodjan
Men en buffer på 128 tecken !?
Verkar väll lite i överkant, är det inte ?
Postat: 11 december 2005, 21:01:52
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
Postat: 11 december 2005, 21:11:30
av Icecap
Jooo..kanske....men det kan ju vara så att man vill printa ut mer än just det hexadecimala värdet.
Postat: 12 december 2005, 14:01:43
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?
Postat: 12 december 2005, 15:59:24
av flippy
Det funkar på alla kompilatorer som stöder ANSI C
Postat: 14 december 2005, 23:01:30
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
Postat: 14 december 2005, 23:18:47
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...
Postat: 16 december 2005, 20:43:35
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å

)