mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik In welcher Bibliothek(R8C) steck itoa


Autor: Heinojodler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 Moderator
Autor: Katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Heinojodler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das macht man eigentlich so:

#include <stdlib.h>

Autor: Heinojodler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meiner Meinung nach liegst du falsch. Jedenfalls finde ich einen Haufe 
Beispiel die Bibliotheken mit "Anführungzeichen" deklariert sind.

Autor: Katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du es mal mit spitzen Klammern probiert?

Autor: Heinojodler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja dann findet er das File nicht.

Autor: Katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Blöder Compiler. Vielleicht der Pfad nicht richtig eingestellt?

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Heinojodler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du stellst dich an...

Dann mach doch einfach mal ne Textsuche im Installationsverzeichnis von 
deinem Compiler.

Autor: Heinojodler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich gemacht und dabei nichts gefunden.

Autor: Marko B. (glagnar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
itoa() ist keine Standardfunktion und ist beim Renesas-Compiler nicht 
dabei. Selberschreiben ist angesagt. Oder sprintf() benutzen, braucht 
aber viel ROM.

Autor: Heinojodler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Gill Bates (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich suche auch gerade einen Source für die Umwandung von "Longint 
to Hex" ohne die sprintf-Funktion.


Grüsse

Gill Bates

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hex-Ausgabe ist sehr einfach, da man bequem jedes Byte in 2 Nibble 
zerlegen kann:

Beitrag "Zahlenausgabe"


Peter

Autor: Gill Bates (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;
}

Autor: Gill Bates (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;
}

Autor: Rene Zimmermann (renezimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: volker block (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);

Autor: volker block (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);

Autor: Jonas Biensack (jibi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Hannes H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte aufs DATUM achten.

Das Exhumieren von Threadleichen ist hier unerwünscht.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.