Dezimal in ASCII
-
Hallo ich habe eine Frage ich möchte die Dezimalzahl 100 in ASCII umwandeln und übertragen.Wie sieht mein ASCII Wert zu meiner Dezimalzahl aus?Wie kann ich eine beliebige zahl so umwandeln?
-
Meinst du, dass du eine Zahl in char's (also einen String) umwandeln willst? Dafür gäbe es itoa, sprintf...
Oder willst du einfach den Wert 100 an irgendein Gerät übertragen? In dem Fall brauchst du nix umwandeln (es wird vielleicht implizit gecastet, nach char oder so).
-
Ich will den Wert 100 übertragen.Wie kann ich das machen?
-
Tja, schick ihn einfach rüber!
Wer mal etwas genauer. Welche Funktion benutzt du zum übertragen? Welchen Typ erwartet die denn? char? void? CHunzUndKunz?
-
Du meinst wahrscheinlich die Umwandlung einer Gleitkommazahl (float oder double) in einen String. Hierfür gibt es noch keine Standardfunktion entsprechend itoa() für integer. Entweder geeignete Libs suchen oder eigene Funktion schreiben.
sprintf geht auch recht gut.
Ich setzte dafür eine eigene Funktion dtochar() für double ein, die auf meine Bedürfnisse zugeschnitten ist. Damit bekomme ich einen ASCII-String, den man als
solchen beliebig verwenden kann. sprintf leistet das nicht unbedingt.Der Source ist aber zu umfangreich, um ihn hier zu posten. Wer will, kann mir eine mail schicken, dann schicke ich den Source gerne zu.
-
Ich soll den Dezimalwert 100 über RS232 übertagen also muss ich daraus irgend welche ASCII zeichen machen.Wenn ich als Strings 100 übertagen würde wäre es ja nicht das Selbe oder?
-
Marin schrieb:
Ich soll den Dezimalwert 100 über RS232 übertagen also muss ich daraus irgend welche ASCII zeichen machen.Wenn ich als Strings 100 übertagen würde wäre es ja nicht das Selbe oder?
Genau, wäre nicht dasselbe. Du würdest 49,48,48 ('1','0','0') schicken, nicht 100. Ich sagte ja schon, du kannst höchstwahrscheinlich einfach deine 100 an die Funktion übergeben, die Daten über RS232 verschickt. Zeig doch mal etwas Code, dann kann man dir auch genauere Antworten geben.
Was du verstehen musst ist, dass auch char ein integraler Wert ist. Du musst also nicht unbedingt aus der 100 das entsprechende ASCII-Zeichen machen. '0' und 48 haben die gleiche Bedeutung, den gleichen Wert (auch, wenn char manchmal anders verwendet wird als int, nämlich z.B. bei der Ausgabe). Daher musst du aus einer 48 auch kein '0' machen, bevor du es rüber schickst. Der Wert ist der gleiche. Die Funktion, die du verwendest, mag vielleicht den Typ char erwarten, aber das kannst du einfach casten oder - noch einfacher - implizit casten lassen. Wie gesagt, zeig mal Code.
-
Weitere Frage zum Verständnis: Müssen die Zeichen einzeln an die Schnittstelle geschickt werden? Dann brauchst du zuvor eine geeignete Umwandlung nach einem String. Ich kenne mich mit RS232 nicht aus. Was kann man da hinschicken, nur einzelne Bytes oder mehr?
@_matze: welche Funktion zum Bedienen der Schnittstelle RS232?
-
berniebutt schrieb:
@_matze: welche Funktion zum Bedienen der Schnittstelle RS232?
Ich mach's immer mit CreateFile, ReadFile, WriteFile (da kann man natürlich Puffer >1Byte zum Übermitteln übergeben). Marin hat ja leider noch gar nichts näheres gesagt (welches OS, welche Funktionen usw.) und sollte dies nun einfach mal tun, damit wir nicht weiter im Trüben fischen.
-
Matze, du musst ganz klar unterscheiden zwischen der Zahl 100 und den Zeichen '1', '0', '0' - sprich der Zeichenkette "100". Das geht aus deinen Beiträgen nicht so richtig hervor.
int i = 100; /* Zahl 100 */ char *s = "100"; /* Zeichenkette "100" */
Auch solltest du erwähnen, welchen Typ deine Funktion erwartet.
-
Janjan schrieb:
Matze, du musst ganz klar unterscheiden zwischen der Zahl 100 und den Zeichen '1', '0', '0' - sprich der Zeichenkette "100". Das geht aus deinen Beiträgen nicht so richtig hervor.
Ach nein?
_matze schrieb:
Genau, wäre nicht dasselbe. Du würdest 49,48,48 ('1','0','0') schicken, nicht 100.
Verwechselst du mich gerade mit Marin?
-
_matze schrieb:
Verwechselst du mich gerade mit Marin?
Ja.
-
_matze schrieb:
Ich mach's immer mit CreateFile, ReadFile, WriteFile (da kann man natürlich Puffer >1Byte zum Übermitteln übergeben).
Das könnte aber sehr langsam sein? Eine Schnittstelle will und soll nicht lange auf Informationen warten und unterwegs soll auch nichts verloren gehen. Gibt es da nichts besseres ohne auf Assembler zurückgreifen zu müssen?
-
berniebutt schrieb:
Du meinst wahrscheinlich die Umwandlung einer Gleitkommazahl (float oder double) in einen String. Hierfür gibt es noch keine Standardfunktion entsprechend itoa() für integer. Entweder geeignete Libs suchen oder eigene Funktion schreiben.
sprintf geht auch recht gut.
sprintf() geht gut, aber was ist itoa()?
-
mngbd schrieb:
sprintf() geht gut, aber was ist itoa()?:)
Das ist eine Standardfunktion jeden C-Compilers für die Umwandlung eines integers in einen string. Gibt es seit Olims Zeiten. Im Gegensatz zu sprintf() wird kein Formatierungsstring benötigt und dürfte damit schneller sein.
-
itoa() ist keine Standardfunktion.