Hallo Ich programmiere in C den R8C. Ich müsste einen Longint ein einen Hex umwandeln. Dazu müsste man doch in C den Befehl "itoa" verwenden? Kann mir einer sagen in welcher Bibliothek der steckt? Und wo man dies nachlesen kann wo dieser steckt. Die Hilfe findet den Befehl jedenfalls nicht. Gruss Heinojodler
:
Gesperrt durch User
Hallo Katzeklo Ich habe sie so eingefügt "#include "stdlib.h" wie die anderen Bibliotheken. Doch irgendwie findet der Compiler "High-Performance Embedded Shop" die nicht. Mein Beispiel: #include "sfr_r813.h" #include "string.h" #include "stdlib.h" #include "stdio.h" void Befehl_RDR(void) { unsigned long int intTimerCVal; unsigned char HexwertV[7]; ultoa(intTimerCIMp, HexwertV,16); } Gruss Heinojodler
Meiner Meinung nach liegst du falsch. Jedenfalls finde ich einen Haufe Beispiel die Bibliotheken mit "Anführungzeichen" deklariert sind.
Blöder Compiler. Vielleicht der Pfad nicht richtig eingestellt?
Der Unterschied zwischen "" und <> gesteht daren, dass der Compiler bei dem einen nur im aktuellen und bei dem anderen in allen Biblioteksverzeichnissen sucht. Welches was macht kann ich aus dem Kopf nicht sagen.
Ich habe die Datei stdlib.h geöffnet. darin gibt nichts was sich itoa, ltoa oder ultoa nennt. Heisst der befehl vielleicht anderes? Oder ist "C" nicht genormt?
Du stellst dich an... Dann mach doch einfach mal ne Textsuche im Installationsverzeichnis von deinem Compiler.
itoa() ist keine Standardfunktion und ist beim Renesas-Compiler nicht dabei. Selberschreiben ist angesagt. Oder sprintf() benutzen, braucht aber viel ROM.
Hallo Marko Ich habe jetzt sprintf probiert verschwendet aber gewaltig Resourcen. Eigentlich müsste ich nur eine Funktion haben die einen "Long int" in einen "Hex-String" umwandelt. Gibt es vielleicht der einen einfachen Source dazu hat? Gruss Heinojodler
Hallo ich suche auch gerade einen Source für die Umwandung von "Longint to Hex" ohne die sprintf-Funktion. Grüsse Gill Bates
Hex-Ausgabe ist sehr einfach, da man bequem jedes Byte in 2 Nibble zerlegen kann: Beitrag "Zahlenausgabe" Peter
Hallo Sorry aber mein wissen reicht im Moment nicht aus um dein Beispiel zu verstehen. Ich habe hier einen Code gefunden der eigentlich geht. Aber nur für bis FFFF. Kann mir jemand den Code so anpassen dass er auch für "long int" geht? Ich habe es selber versucht, da ich aber de Code nicht ist es mir nicht gelungen ihn anzupassen dass er funktioniert. Es kann nur Müll raus. "Long int" soll sollte doch 4 Byte haben. Gruss Gill Bates // wandelt eineZahl in einen 4 Byte grossen HEX-String void itohexa(unsigned int n, unsigned char * s) { unsigned int help; unsigned int z; help = n; for (z=3;z>0;z--) { if ((help & 0x000F) > 9) s[z] = (help & 0x000F) + 55; else s[z] = (help & 0x000F) + '0'; help = help >> 4; } s[4] = 0; }
So habe ich den Code abgeändert funktionert aber nicht. void itohexa(unsigned long int n, unsigned char * s) { unsigned long int help; unsigned long int z; help = n; for (z=7;z>0;z--) { if ((help & 0x0000000F) > 9) s[z] = (help & 0x0000000F) + 55; else s[z] = (help & 0x0000000F) + '0'; help = help >> 8; } s[8] = 0; }
Hi, ich hoffe das ich das Problem richtig verstanden habe. #include <stdio.h> void itohexa(uint32_t n, uint8_t * s){ for (int8_t z=7;z>-1;z--){ if ((n & 0x0000000F) > 9){ s[z] = (n & 0xF) + 55; } else{ s[z] = (n & 0xF) + '0'; } n >>= 4; } s[8] = 0; } int main(void){ uint8_t buffer1[9]; // buffer von 0 bis 8 !!! itohexa(0xAA55FF, buffer1); uint8_t buffer2[9]; // buffer von 0 bis 8 !!! itohexa(0xFFAA5500, buffer2); } Gruß Rene
c=4294967295; int i2; int stellen=8; int basis=16; char h[20]="";char n[20]="000000"; ltoa(c,h,basis); strcat(n,h); i2=strlen(n); strncpy (h,n+i2-stellen,stellen); textausgabe(h);
c=4294967295; int i2; int stellen=8; int basis=16; char h[20]="";char n[20]="00000000"; ltoa(c,h,basis); strcat(n,h); i2=strlen(n); //for (i1=i2-stellen;i1<i2;i1++){lcd_data(n[i1]);} strncpy (h,n+i2-stellen,stellen); textausgabe(h);
>c=4294967295; int i2; int stellen=8; int basis=16; > char h[20]="";char n[20]="00000000"; >ltoa(c,h,basis); strcat(n,h); i2=strlen(n); //for >(i1=i2-stellen;i1<i2;i1++){lcd_data(n[i1]);} >strncpy (h,n+i2-stellen,stellen); >textausgabe(h); Enter-Taste kaputt? Gruß Jonas
Mit " " bindest du die Bibliothek des Projektverzeichnis ein, in dem du das Projekt abspeicherst. Das ist nur notwendig, wenn man Bibliotheken abändern will. Dazu kopiert man das Bibliothek-File ins eigene Verzeichnis. Verwendest du die stinknormale, unveränderte Bibliothek, reicht es vollkommen aus, diese mit < > einzubinden.
Bitte aufs DATUM achten. Das Exhumieren von Threadleichen ist hier unerwünscht.