Hallo zusammen,
nachdem mir die Suchfunktion nicht besonders geholfen hat frag ich mal
nach.
Ich möchte lediglich ein Byte (uint) als Hexadezimal Zahl im String
speichern um es anschließend ausgeben zu können. Da ich mit einem PIC
arbeite kann ich leider nicht einfach itoa mit Radix nutzen, da der Pic
es nicht unterstütz.
Also im Prinzip variable wandeln in Hex --> in String wandeln -->
Ausgeben.
Bei mir harperts an dem Klammerninhalt. Ich habe jetzt schon
verschiedene Seiten in denen die Funktion erklärt ist, jedoch werden bei
mir nach wie vor Dezimalzahlen ausgegeben oder z.T. Dezimalzahlen mit
einen ? dahinter. Zum Teil auch ganz wirres Zeug oder garnichts. Ich
habe jetzt schon etwas rumprobiert.
Ich bin für jede Hilfe dankbar
Ein
Char buffer[4];
Uint wert; //0..255
Sprintf(Buffer,"%x",Wert);
Sollte es tun, aber natürlich ist es ziemlich blöd, die grosse Funktion
sprintf einzubinden und den Format-String analysieren zu lassen, wenn
man nur die eine dahinterliegende Funktion braucht, auch wenn die
diesmal nicht itoa heisst.
Gerd schrieb:> Hallo zusammen,>> nachdem mir die Suchfunktion nicht besonders geholfen hat frag ich mal> nach.>> Ich möchte lediglich ein Byte (uint) als Hexadezimal Zahl im String> speichern um es anschließend ausgeben zu können. Da ich mit einem PIC> arbeite kann ich leider nicht einfach itoa mit Radix nutzen, da der Pic> es nicht unterstütz.
Echt?
Da die Funktion eigentlich recht einfach ist, wundert mich das aber.
Allerdings ist itoa keine Standardfunktion (ganz im Gegensatz zu atoi).
Es könnte daher sein, dass die Funktion auf deinem Compiler
konformerweise zb _itoa heißt.
> Also im Prinzip variable wandeln in Hex --> in String wandeln -->> Ausgeben.>> Bei mir harperts an dem Klammerninhalt. Ich habe jetzt schon> verschiedene Seiten in denen die Funktion erklärt ist, jedoch werden bei> mir nach wie vor Dezimalzahlen ausgegeben
Das kann aber eigentlich nicht sein.
Denn wenn du die Funktionalität con Dezimalausgabe auf
HExadezimalausgabe umgestellt hast, dann können da auch keine
Dezimalzahlen mehr rauskommen.
> einen ? dahinter. Zum Teil auch ganz wirres Zeug oder garnichts. Ich> habe jetzt schon etwas rumprobiert.
Weniger rumprobieren und mehr systematisch vorgehen.
Aber wenn du sowieso sprintf benutzt, warum benutzt du dann nicht ganz
einfach die %x Format Spezifizierung?
sprintf( buffer, "%x", variable );
Martin B. schrieb:> oder so?>> char *xtoa(char val, char *str)> {> char *z="0123456789abcdef";
...
Die 16 Bytes RAM muß man nicht verschwenden wenn man es so macht:
1
voidhexout(uint8_tx)
2
{
3
registeruint8_td=(x>>4)&0x0F;
4
lcd_putc(d+(d>9?'A'-10:'0'));
5
d=x&0x0F;
6
lcd_putc(d+(d>9?'A'-10:'0'));
7
}
Den Krempel mit String-Buffer allozieren und anhängen überlasse ich dem
TE zur Übung.
XL
Ich möchte die Ausgabe nun noch dahingehend erweitern das mir immer zwei
Stellen angezeigt werden: Also 0x00
Wenn ich nun z.B. eine 0x05 sende, wird sie mir als 0x5 angezeigt ich
hätte es aber lieber in dem format 0x05.
ich nutze standmäßig diesen befehl:
sprintf(out[0][2]," %#x \n",Ausgabe);
habe diesen dann nach der Anleitung -->
http://home.fhtw-berlin.de/~junghans/cref/FUNCTION...
modifiziert und habe folgenden Befehl benutzt:
sprintf(out[0][2]," %04#x \n",Ausgabe);
Eigentlich sollten jetzt 4 Stellen für die Ausgabe reserviert sein und
die Leerzeichen mit 0 ausgefüllt werden. (So wie ich das interpretiere)
Ich bekomme allerdings nurnoch ein "x" ausgegeben. Ich denke ich habe
irgendwo einen grundsätzlichen Denkfehler.
Vielleicht hat von euch einer eine idee..
Dankeschön!
Gerd schrieb:> habe diesen dann nach der Anleitung -->> http://home.fhtw-berlin.de/~junghans/cref/FUNCTION...>> modifiziert und habe folgenden Befehl benutzt:>> sprintf(out[0][2]," %04#x \n",Ausgabe);
Wenn du mal auf der Webseite GENAU schaust, dann siehst du, dass dort
der # beim % bleibt. Ob allerdings dein PIC # überhaupt unterstützt, ist
eine andere Frage.
Probier mal
1
sprintf(out[0][2]," %#04x \n",Ausgabe);
Wenn das nicht geht, dann eben auf die alte klassische Methode, indem du
das "0x" einfach selber hinschreibst.
1
sprintf(out[0][2]," 0x%04x \n",Ausgabe);
Letztere Version ist IMHO sowieso zu bevorzugen, denn laut deiner Doku
1
%#x (Hex) 0x Präfix wird bei Werten ungl. Null eingefügt.
man beachte das 'ungleich 0'. Das ist eher selten sinnvoll.
DirkB schrieb:> Wie ist denn out definiert?
Das würde mich allerdings auch interessieren.
Denn in einer so allgemeinen Funktion ein 3-dimensionales Array zu
benutzen, ist reichlich ungewöhnlich.
Gerd schrieb:> sprintf(out[0][2]," %#x \n",Ausgabe);> sprintf(out[0][2]," %04#x \n",Ausgabe);
Was soll da das #?
sprintf(out[0][2]," %04x \n",Ausgabe);
sollte besser funktionieren -- wenn "out" funktioniert.
DirkB schrieb:> Wie ist denn out definiert?
Die Frage ist hier nicht unwichtig.