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...


  • Mod

    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


Anmelden zum Antworten