Forum: Projekte & Code [C] Integer in String umwandeln


von B. S. (bestucki)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Im Zusammenhang eines Projekts ist eine C-Bibliothek entstanden, welche 
Integer in Strings umwandelt. Unterstützt werden dabei die Datentypen 
aus stdint.h: (u)int8/16/24/32/64_t. Für jeden Datentyp existiert eine 
eigene Funktion, diese Funktionen enthalten jedoch alle den selben Code. 
Um eine Copy&Paste-Orgie zu vermeiden, wurde eine Makro-Orgie gestartet, 
was die Übersichtlichkeit nicht wirklich verbesserte, dafür müssen 
Änderungen am Code nur an einer Stelle vorgenommen werden.

Eine Dokumentation existiert zur Zeit nicht, daher hier eine kurze 
Anleitung:
1
char *(u)int??str(char *target, (u)int??_t source)
Diese Funktionen wandeln einen Integer in einen String um. Dafür sollte 
möglichst immer der kleinstmögliche Datentyp gewählt werden. Wenn ein 
uint8_t umgewandelt werden soll, sollte auch uint8str(...) verwendet 
werden, denn z.B. mit uint32str(...) kann die Umwandlung der gleichen 
Variablen ca. 5 mal länger dauern.
1
char *(u)fixint??str(char *target, (u)int??_t source, int_fast8_t cp)
Diese Funktionen wandeln Fixkommazahlen in Strings um. Der Wert von cp 
bestimmt den Ort des Kommas. Ist cp z.B. 3, so wird aus 1234 1.234. Ist 
cp -3, so wird aus 1234 1234000. Diese Funktionen sind eher 
Speicherintensiv was den Programmspeicher anbelangt, daher sollten nicht 
benötigte Funktionen auskommentiert werden, wenn kein Compiler verwendet 
wird, der nicht benötigten Code nicht compiliert.
1
char *strRalign(char *str, uint_fast8_t minlenght)
Diese Funktion richtet die erzeigten Strings nach rechts aus. minlenght 
gibt dabei die Länge des zu erzeugenden Strings an. Ist der String 
länger als minlenght, so wird der String nicht verändert.

Da alle Funktionen den Pointer zum String zurückgeben, kann ein nach 
rechts ausgerichteter String in einer Zeile erzeugt werden:
1
strRalign(uint16str(str,value),6);


Diese Funktionen sind mit meinem System (PIC18F452 + XC8-Compiler) 
schneller, als itoa und utoa aus der Standardbibliothek, besonders wenn 
8Bit Variablen umgewandelt werden müssen. Dafür kann bei meinen 
Funktionen die Basis nicht gewählt werden, es ist also nur eine dezimale 
Darstellung möglich.

Konstruktive Kritik, Verbesserungsvorschläge und Vorschläge für 
Erweiterungen sind jederzeit willkommen. Falls jemand einen Fehler 
findet, bitte ich ihn, dies mir mitzuteilen.

von B. S. (bestucki)


Angehängte Dateien:

Lesenswert?

Ich habe noch eine kleine Anwenderdokumentation geschrieben, die dabei 
helfen soll, die Bibliothek zu benutzen. Eine ausführliche Dokumentation 
des Sourcecodes ist nicht geplant.

Natürlich habe ich schon einen kleinen Fehler gefunden. Bei der 
Ermittlung der Stringlänge in strRaglign wird auf 0 (Null) statt '\0' 
geprüft. In den meisten Fällen sollte dies keine Probleme machen, 
ansonsten händisch korrigieren. Näheres dazu in der Anwenderdoku.

von B. S. (bestucki)


Angehängte Dateien:

Lesenswert?

Es gibt eine neue Version, in der in den oben genannten Fehler 
korrigiert habe. Zusätzlich habe ich noch eine kleine Optimierung 
gemacht.

von Peter D. (peda)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.