Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » int -> char*

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.01.2007, 15:15 Uhr
Pablo
Supertux
(Operator)


Hi

ich brauche mal wieder eure Hilfe. Dieser Thread ist eher für unsere Rätselecke reif

Ich schreib zur Zeit (Studienarbeit) einen Kernel für einen PXA Prozessor und ich bin gerade dabei, einen Treiber für die serielle Schnittstelle zu schreiben.

Eine Einfache Funktion, die nur Zeichen ausgibt, habe ich schon implementiert und getestet, es läuft einwandfrei.

Da ich die serielle Schnittstelle für die Ausgabe (vor allem Debugging) benutzen werden, wollte ich mir eine Funktion wie printf schreiben, d.h. ich hab mir meine eigene va_list Macros zusammengebaut, was ja nicht schwer ist.

Meine Funktion heißt kprint und das Format %d für dezimal, %x für hexadezimal, %o octal und %b binär. %x,%o,%b ist kein Problem zu schreiben, was mich ein bisschen Ärger bereitet, ist das %d Format: mir fällt kein gescheites Verfahren, um eine Dezimal Zahl auszugeben (ich kann printf & co nicht benutzen) und ich will keine naives Verfahren einsetzen.

Ich brauche eine Funktion


C++:
char *print_int(int x)
{
    static char str[1000]; /* zur Vereinfachung */

    /* gescheites Verfahren */

    return str;
}



die eine Zeichendarstellung von x erzeugt.

Das größte Problem ist, dass ich nicht auf die glibc zugreifen kann, sprich kein pow, log, sqrt, usw wer hilft mir, etwas performantes zu schreiben?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.01.2007, 15:58 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Hmm es gibt unter Windows die _ecvt Funktion um einen double Wert in einen String umzuwandeln. Kannst ja mal nach der implementierung suchen (evtl. gibts die Funktion auch für Unix) und dir da was abschauen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.01.2007, 16:51 Uhr
0xdeadbeef
Gott
(Operator)


Ist ungetestet, aber ungefähr so:

C++:
char *print_int(int x) {
  static char buffer[20];
  char *p = &str[19];
  int x_abs = x < 0 ? -x : x;

  for(*p = 0; x_abs != 0; x_abs /= 10) {
    *--p = x_abs % 10 + '0';
  }

  if(x < 0) *--p = '-';
  return p;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.01.2007, 17:00 Uhr
Pablo
Supertux
(Operator)


danke für die Antwort, ich schau mir nachher an

Gruss
Pablo
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: