char in Zeichenketten umwandeln
-
Hello,
ich verwende gerade die Bibliothek von Ramon de Klein (http://www.codeproject.com/KB/system/serial.aspx?msg=3519759#xx3519759xx) für die serielle Schnittstelle mit Visual Studio. Der Prototyp von der Methode "Write()" lautet:
LONG CSerial::Write(LPCSTR,DWORD *,LPOVERLAPPED,DWORD)
also nur Zeichenketten dürfen übertragen werden. Ich muss nun eine Zahl von unsigned char senden. Was mache ich um diese Methode zu verwenden?
MfG
Senmeis
-
1. Du könntest die Zahl in einen String umwandeln (Such in der FAQ)
2. Oder Du kannst die Zahl auch binär versenden.
-
Ich verstehe deine Überschrift nicht ganz... (char in Zeichenkette umwandeln). Im Thread schreibst du dann, dass du eine Zahl übermitteln willst. Nimm einfach einen CString und kopiere dort mittels CString::Format die Zahl rein und damit hast du auch automatisch schon einen LPCSTR.
-
@AndyDD: und was wenn die Zahl vom Typ char ist? Dann ist die Überschrift klar..
-
theta schrieb:
@AndyDD: und was wenn die Zahl vom Typ char ist? Dann ist die Überschrift klar..
Zahl vom Typ char? In meiner Begriffswelt ist mit char eindeutig ein Zeichen verbunden und Zahlen bestehen nun mal aus Ziffern. Wie auch immer, entweder hat er/sie ein Kovertierungsproblem Zahl->CString->LPCSTR oder char->LPCSTR, wobei ich auch dort über CString gehen würde. Übrigens verwende ich diese Klasse auch, allerdings hatte ich bisher nur Lesezugriffe...
-
Deshalb bleibt ein char dennoch nichts anderes als ein signed Integer mit 8bits, bei den meisten Compiliern und ist damit eine Zahl...
-
Idealerweise soll die Zahl binär versendet werden, aber wie? Es geht offensichtlich nicht einfach mit
CSerial serial; char var1 = 100; lLastError = serial.Write(var1);
itoa() ist eine Option, aber nicht so effizient. Bei 100 werden drei Zeichen '1', '0' und '0' versendet.
-
char var1 = 100; LPCSTR buffer = &var1; const DWORD bufferSize = sizeof(var1); lLastError = serial.Write(buffer, bufferSize);
-
Du kannst prinzipiell jeden Pointer eines Types in einen Pointer eines anderen Typs casten. Physikalisch sind beide ja nur eine Speicheradresse, der über das Typsystem von C++ ein Typ zugewiesen wird. Weswegen du auch ganz einfach *char in LPCSTR casten kannst, LPCSTR steht für Long Pointer C-String und ist eigentlich ein *CString.
(Das war jetz die Erklärung zu dem Codeschnipsel über diesem Beitrag
)
Gruß,
Marius