Typumwandlung: unsigned char -> char



  • Hallo!

    Wie kann ich einen strSource mit Datentyp char ohne Datenverlust umwandeln, so dass ich diese Routine:

    unsigned char *_mbscpy( unsigned char *strDestination, const unsigned char *strSource );
    

    durchführen kann?

    Folgende Schritte funktionieren ja nicht!?

    char strSource_c;
    unsigned char strSource_uc = (unsigned char) strSource_c;
    

    Ciao



  • Wo genau liegt das Problem?

    Du kannst das einfach zuweisen. Das einzige "Problem" liegt darin, dass char den Wertebereich -128 bis 127 und unsigned char den Wertebereich 0 bis 255 hat.



  • Hallo,

    weil mir bei folgendem Beispiel:

    char test1_[]="testdatei";
    unsigned char uc;
    _mbscpy(uc,test1_);
    cout<<"\n"<<uc<<"\n"<<endl;
    

    diese Fehlermeldung ausgegeben wird:
    Konvertierung des Parameters 1 von 'unsigned char' in 'unsigned char *' nicht moeglich. Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    Ciao



  • Steht ja schon alles da? Du müsstest einen Unsigned-Char-Zeiger übergeben, gibst ihm aber nur ein einzelnes Zeichen...

    Schau dir einfach die Deklarationen nochmals an und die Fehlermeldung etwas genauer und dir dürfte was auffallen...

    -junix



  • Hallo!

    char *test1_="gabi";
    unsigned char *uc;
    _mbscpy(uc,test1_);
    cout<<"\n"<<&uc<<"\n"<<endl;
    

    Fehlermeldung:
    Konvertierung des Parameters 2 von 'char *' in 'const unsigned char *' nicht moeglich:
    Also muss ich doch test1_ in unsigned char umwandeln?



  • jepp. static_cast ahoi... technisch gesehen sind char und unsigned char (von der grösse her) identisch. Ist nur ne Frage wie der Compiler die Bitmuster im Speicher interpretiert.

    allerdings hoffe ich, du bist dir bewusst, dass uc im Moment nur ein Zeiger ist und noch keinen Speicher besitzt. Im moment würdest du (wenns Funktionieren würde) völlig unkontrolliert irgendwelchen Speicher überschreiben. -> malloc() lässt grüssen.

    und schau dir die cout-Zeile mal genauer an. Da ist nu n Fallstrick drin.
    Da fällt mir auf: Was machst du überhaupt im AnsiC-Forum? Das gehört nach C++ (eigentlich) dann kannst du auch malloc() durch new ersetzen.

    -junix



  • Was mich aber noch interessieren würde: Was willst du eigentlich mit dem String als unsigned-char-Zeichen anfangen?

    -junix


Anmelden zum Antworten