String to Byte?



  • Hallo,

    meine RegSetValueEx() braucht einen Byte Wert als Eingabewert, meine Copy Funktion jedoch char. Da ich 2 Zeichenketten addieren möchte, habe ich beide als String definiert.

    Nun ist meine Frage, wie bekomme ich einen String in BYTE konvertiert?

    Vielen Dank im voraus und
    liebe Grüße
    Patrick



  • So:

    reinterpret_cast<const byte*>(deinString.c_str());
    


  • Code:

    BYTE cString[] = reinterpret_cast<const byte*>(pfad.c_str());
    

    Fehlermeldung:

    G:\C++\keylogger_installer\main.cpp||In function `int main(int, char**)':|
    G:\C++\keylogger_installer\main.cpp|27|error: initializer fails to determine size of `cString'|
    G:\C++\keylogger_installer\main.cpp|27|error: invalid initializer|
    ||=== Build finished: 2 errors, 0 warnings ===|
    


  • Im konkreten Fall muss es

    const BYTE* cString = reinterpret_cast<const BYTE*>(pfad.c_str());
    

    lauten.



  • Ich merk schon, C++ mag mich richtig...

    // BYTE cString[] = reinterpret_cast<const byte*>(pfad.c_str());
    const BYTE* cString = reinterpret_cast<const BYTE*>(pfad.c_str());
        RegSetValueEx(hKey,"EintragsName",0,REG_SZ,cString,strlen(reinterpret_cast<char*>(cString))+1);
    

    Fehler:

    G:\C++\keylogger_installer\main.cpp||In function `int main(int, char**)':|
    G:\C++\keylogger_installer\main.cpp|30|error: reinterpret_cast from type `const BYTE*' to type `char*' casts away constness|
    ||=== Build finished: 1 errors, 0 warnings ===|
    

    Das wird mir schon peinlich langsam, dass ich das nicht hinbekomme und euch immer fragen muss :S



  • Du darfst das const nicht einfach wegcasten, demnach musst du nach const char* casten.
    Oder gar nicht und gleich strlen(pfad.c_str())+1 schreiben.



  • Patistar schrieb:

    strlen(reinterpret_cast<char*>(cString))+1
    

    WTF?

    cString.length() + 1
    


  • Das Problem ist aber, dass .length() by BYTE nicht funktioniert?!

    const BYTE* cString = reinterpret_cast<const BYTE*>(pfad.c_str());
    RegSetValueEx(hKey,"EintragsName",0,REG_SZ,cString,cString.length() + 1);
    
    G:\C++\key_installer\main.cpp||In function `int main(int, char**)':|
    G:\C++\key_installer\main.cpp|31|error: request for member `length' in `cString', which is of non-class type `const BYTE*'|
    ||=== Build finished: 1 errors, 0 warnings ===|
    


  • Er meinte pfad.length().



  • Ich glaub ich habe eine Lösung:

    RegSetValueEx(hKey,"EintragsName",0,REG_SZ,reinterpret_cast<const BYTE*>(pfad.c_str()),strlen(pfad.c_str()) + 1);
    

  • Administrator

    Und wieso zum Geier nicht so?

    BYTE const* data = reinterpret_cast<BYTE const*>(pfad.c_str());
    RegSetValueEx(NULL, "EintragsName", 0, REG_SZ, data, pfad.length() + 1);
    //                                                   ^^^^^^^^^^^^^^^^^
    

    Grüssli



  • Stimmt, da hätte ich auch drauf kommen können...

    Vielen Dank 😉



  • Patistar schrieb:

    Das Problem ist aber, dass .length() by BYTE nicht funktioniert?!

    Athar schrieb:

    Er meinte pfad.length().

    Ja richtig, sorry.


Anmelden zum Antworten