Float to *char Konvertierung

Hi,

für eine Anwendung muß ich Werte von Variablen (Float oder int) in einen String umwandeln.
Gibt es da schon Funktionen?
z.B.
char *itostr(int value);
oder
char *ftostr(float value; int nk);
(nk = nachkommastellen)

btw. Printf geht nicht, da ich den String weiterverarbeiten muß.

Besten Dank

mus

Hi,
da gibts wsprintf(‚string‘,„die Textformatierung erfolgt wie bei printf“)

also z.Bsp.

#inlude

int main(){
char text[100];
int a=23;

wsprintf(text,„Dies ist nummer %d“,a);
return 0;}

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!

Ich verstehe Deinen Hinweis mit dem Printf nicht.
In welcher Weise willst Du den String weiterverarbeiten?

Ich persönlich würde immer die printf-Variante verwenden, wenn Du ANSI-kompatibel bleiben willst.

Grüsse Safog

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

leider habe ich kein stdio.h auf dem Microprozessor, deshalb geht printf nicht.
Ich habe inzwischen einige Funktionen gebastelt, um eben einen string auf dem alphanumerischen LC-Display (hat ASCII-Zeichentabelle) darzustellen (Übergabe erfolgt halt Zeichenweise)

Alles klar?

Tschööö

mus.

Hallo!

Ich verstehe Deinen Hinweis mit dem Printf nicht.
In welcher Weise willst Du den String weiterverarbeiten?

Ich persönlich würde immer die printf-Variante verwenden, wenn
Du ANSI-kompatibel bleiben willst.

Grüsse Safog

Hi,

vielleicht hätte ich sagen müssen, daß ich auf dem Microcontroller, wo das Ding laufen soll, eben kein printf oder so gehen.
Ich habe da ein Display, an das ich Zeichen schicken kann (das auszutüfteln hat 2 Wochen gedauert), und mir ne Funktion geschrieben, die eben Strings auf dem Display darstellt.

Nun möchte ich ja auch die Ergebnisse meiner Berechnungen darstellen…

Besten Dank…

mus…

Hi,
da gibts wsprintf(‚string‘,„die Textformatierung erfolgt wie
bei printf“)

also z.Bsp.

#inlude

int main(){
char text[100];
int a=23;

wsprintf(text,„Dies ist nummer %d“,a);
return 0;}

Ich habe vergessen, hier zu schreiben, daß ich das Programm auf einem Microcontroller laufen habe, der kein stdio.h oder ähnliches kennt.
Und das Display (alphanumerisches LCD) ist nur zeichenweise anzusprechen. (kann auch char* ausgeben, habe da inzwischen die
Funktionen) Aber Zahlen kann ich leider nicht übergeben…

Ich suche eine ähnliche Funktion wie sprintf, aber etwas kleiner, da die Funktion zu einem Neustart des Programms führt.

Besten Dank für weitere Tipps…

mus.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

So geht es ohne stdio.h
Hi Mus :smile:

Ich habe mir Folgendes überlegt:

#include 
#include 
#include //Nur fuer Demo-Zwecke
//
//Wandelt einen long-Wert in einen String um.
//
char \*ltoa( long num )
{ static char res[3\*sizeof(long)+2];
 long absNum= num\>=0 ? num : -num;
 int i= 3\*sizeof(long)+1;
 res[i--]= '\0';
 do{ res[i--]= (char) ('0' + absNum%10);
 absNum/= 10;
 }while (absNum\>0);
 if (num
Du erhälst eine standardisierte Ausgabe, die du dann nach deinen Bedürfnissen weiter verarbeiten kannst. Beachte bitte, dass das printf nur für Testzwecke da ist. Für die Umwandlung brauchst du die stdio.h nicht zu laden.

cu Stefan.

Hi Stefan,

habe mir inzwischen auch einiges überlegt:

void inttostring(int value, char \*valuestring)
{
 bool neg = false;
 char tempstr[20];
 int i = 0;
 int c; // one digit
 char \*tempstring;
 tempstring = valuestring;
 if (value -1;i--)
 {
 \*tempstring = tempstr[i];
 tempstring++;
 }
 \*tempstring = '\0';
}


void floattostring(float value, int decimal, char \*valuestring)
{
 bool neg = false;
 char tempstr[20];
 int i = 0;
 int j = 0;
 int c; // one digit
 long int val1, val2;
 char \*tempstring;
 tempstring = valuestring;
 if (value 0) && (i == decimal))
 {
 tempstr[i] = (char)(0x2E);
 i++;
 } 
 else
 {
 c = (val2 % 10);
 tempstr[i] = (char) (c + 0x30);
 val2 = val2 / 10;
 i++;
 } 
 }
 if (neg)
 {
 \*tempstring = '-';
 tempstring++;
 }
 i--;
 for (;i \> -1;i--)
 {
 \*tempstring = tempstr[i];
 tempstring++;
 }
 \*tempstring = '\0';
}

Ich brauche in diesem Falle ja ne Dezimalausgabe (soll ein einfach abzulesenes Meßgerät werden) vielleicht läßt sich der Code aber noch etwas optimieren? (will nicht zuviele Libraries einbinden, wenn ich es smarter programmieren kann, habe für alles nur 16K *16bit zur Verfügung)

Habe keine speziellen Funktionen gebraucht, aber werde Deinen Algorithmus mir nachher genauer anschauen.

PS: ich habe hier keine Standardausgabe, nur das LCD am Prozessor, und da schaut der Funktionsaufruf dann so aus:

lcd\_print(zeile,HOME2\_LCD);

Hallo mus

für eine Anwendung muß ich Werte von Variablen (Float oder
int) in einen String umwandeln.
Gibt es da schon Funktionen?
z.B.
char *itostr(int value);
oder
char *ftostr(float value; int nk);
(nk = nachkommastellen)

btw. Printf geht nicht, da ich den String weiterverarbeiten
muß.

Wenn du willst kann ich dir einen optimierten Source für printf(), sprintf() mailen. Du kannst dann ganz einfach die Funktion zur Ausgabe auf dein LCD einfügen.
Ich verwende es in einem H8/300H Projekt.

MfG Peter(TOO)

Hi Peter,

also wenn Du die Funktionen unten
http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…
toppen kannst, sehr gerne…

Wichtig ist aber bei der Float-Konvertierung die Rundung…

Wenn du willst kann ich dir einen optimierten Source für
printf(), sprintf() mailen. Du kannst dann ganz einfach die
Funktion zur Ausgabe auf dein LCD einfügen.
Ich verwende es in einem H8/300H Projekt.

MfG Peter(TOO)

Grüßle

mus.