PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASCII Zeichen über serielle Schnittstelle ausgeben??



maetsches
14.03.2007, 17:12
Hallo,

ich programmiere gerade kleine Miniroboter und benutze Visual C++ in VS 2005.

Die Roboter brauchen die Zahlen 0-255 als ASCII-Zeichen, d.h. wenn ich ihnen "50" schicken möchte muss ich ihnen "P" schicken.

Wie kann ich mit .NET ein Integer in ein ASCII-Zeichen umwandeln, das ich dann in der Konsole oder über eine serielle Schnittstelle ausgeben kann?

Das muss doch irgendwie mit der Encoding-Klasse funktionieren, ich bekomms aber nicht hin.

Xaver
14.03.2007, 22:18
die meisten c bibliotheken bieten eine Funktion die sich itoa() nennt (integer to ascii).

robocat
14.03.2007, 22:26
itoa macht aus int i=50 einen string "50". das ist glaube ich nicht erwünscht. allerdings verwende ich kein ".NET".
ich würde sowas machen:

#include <stdio.h>
char ch[2];
int wert=50;
sprintf(ch,"%c",wert);

michas_rob
15.03.2007, 22:30
@ maetsches

Hallo du am einfachsten ist es wenn du den ASCII Wert als HEX Wert abspeicherst und diesen dann ausgibst.
Und noch besser wäre es dann noch das ganze in einer unsigned char Variable zu peichern als in einer int, da diese doppelt so groß ist.

NumberFive
17.03.2007, 08:28
Ist es wirklich nur ein zeichen oder in wirklich kein ein string ?
Die String klasse kann nämlich ein Array of byte zurück geheben.

im Übrigen geben ich michas_rob recht wenn nur die werte 0 - 255 gehen da ist ein int zu groß klar bei den heutige PC macht es nix aus aber ich gehöre hal noch zu den die mal mit C16 angefangen haben wo es nur 16K hauptspeicher gab.

Wenn es wirklich ein int über tragen werden soll da müsste das Funktionieren:

int nWert = 320;

BYTE nChar1 = LOBYTE(nWert);
BYTE nChar2 = HIBYTE(nWert);

oder

BYTE nChar1 = nWert >> 8;
BYTE nChar2 = nWert;

Man müsste das ziel genauer kennen.

itoa() ist leider die Falsche antwort das würde auf dem int mit dem wert 50
drei Bytes machen <35><30><00>. das nur so am rande


Gruß