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


von Heinojodler (Gast)


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 User
von Katzeklo (Gast)


Lesenswert?


von Heinojodler (Gast)


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

von Katzeklo (Gast)


Lesenswert?

Das macht man eigentlich so:

#include <stdlib.h>

von Heinojodler (Gast)


Lesenswert?

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

von Katzeklo (Gast)


Lesenswert?

Hast du es mal mit spitzen Klammern probiert?

von Heinojodler (Gast)


Lesenswert?

Ja dann findet er das File nicht.

von Katzeklo (Gast)


Lesenswert?

Blöder Compiler. Vielleicht der Pfad nicht richtig eingestellt?

von Obelix (Gast)


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.

von Heinojodler (Gast)


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?

von Katzeklo (Gast)


Lesenswert?

Du stellst dich an...

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

von Heinojodler (Gast)


Lesenswert?

Habe ich gemacht und dabei nichts gefunden.

von Marko B. (glagnar)


Lesenswert?

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

von Heinojodler (Gast)


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

von Gill Bates (Gast)


Lesenswert?

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


Grüsse

Gill Bates

von Peter D. (peda)


Lesenswert?

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

Beitrag "Zahlenausgabe"


Peter

von Gill Bates (Gast)


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;
}

von Gill Bates (Gast)


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;
}

von Rene Z. (renezimmermann)


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

von volker block (Gast)


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);

von volker block (Gast)


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);

von Jonas B. (jibi)


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

von Hannes H. (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bitte aufs DATUM achten.

Das Exhumieren von Threadleichen ist hier unerwünscht.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.