System String zu Char*



  • Hi,

    ich bin neu hier im Forum, ich bin der Peter und programmiere hin und wieder c++.

    Ich habe derzeit folgendes Problem:
    Ich möchte in eine Datei im Binär Modus schreiben.
    Jedoch muss ich dafür den String den ich in die Datei bekommen möchte auf einen Zeiger des Datentyps Char bekommen.
    Leider habe ich keine Ahnung wie das geht.
    Ich habe es bereits mit c_str(); versucht:

    const char *c_str1 = Text01.c_str ( );
    

    doch da bekomme ich nur:

    "links von ".c_str" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist 'System::String ^'
    "

    Als Fehler ausgegeben.

    Quellcode:

    Text01 = this->textBox1->Text;
    				 const char *c_str1 = Text01.c_str ( );
    
    				 ofstream Output ("Verschlüsselt.txt", ios::binary);
    				 Output.write ((char*) &Text01, sizeof (Text01));
    				 Output.close();
    

    Veilleich wisst ihr ja wie das geht?!?

    MfG Peter



  • Hi Killerpeter,

    von Microsoft gibt es dazu folgendes Beispiel. Es funktioniert eigentlich echt gut:

    pin_ptr<const wchar_t> wch = PtrToStringChars(NewDesctxt->Text);
    						 size_t convertedChars = 0;
    						 size_t sizeInBytes = ((NewDesctxt->Text->Length + 1) * 2);
    						 errno_t err = 0;
    						 char *desc = (char *)malloc(sizeInBytes);
    
    						 err = wcstombs_s(&convertedChars, desc, sizeInBytes, wch, sizeInBytes);
    

    (Dieser Codeabschnitt ist in meinem aktuellen Programm. NewDesctxt->Text ist dabei der System::String(Inhalt eines Textfeldes))

    Ich hoffe das kann dir helfen.
    Hier ist nochmal der Link zum Beitrag im MSDN:
    http://msdn.microsoft.com/de-de/library/d1ae6tz5.aspx

    Mfg
    Turbo_Freak



  • Das ist die Lösung!
    Musste den Code zwar noch Ändern aber dann gings.

    Ich danke dir.



  • Wie geht das denn jetzt genau anders herum?
    Also Char* in System String?



  • In der C++/CLI FAQ gibt einen Beitrag je Kovertierungs-Richtung...



  • Hi Killerpeter,

    das ist viel einfacher 🙂

    ein kleines Beispiel:

    char     c_mystring[ 51 ] = "Das ist ein Test!";
    String^  s_mystring = gcnew String( c_mystring );
    

    Gruß
    Turbo_Freak



  • Die Umwandlungen scheint doch nicht zu funktioniern:

    Text_B = this->textBox1->Text;
    
    				  // Pin memory so GC can't move it while native function is called
       pin_ptr<const wchar_t> wch = PtrToStringChars(Text_B);
    
       //Converting
       size_t convertedChars = 0;
       size_t  sizeInBytes = ((Text_B->Length + 1) * 2);
       errno_t err = 0;
       char    *ch = (char *)malloc(sizeInBytes);
    
       //Mit Pointer schreiben
    				 ofstream Output ("Verschlüsselt.txt", ios_base::out | ios_base::binary);
    				 Output.write ((char*) &ch, sizeof (Text_B));
    				 Output.close();
    

    Wenn ich da jetzt a reinschreibe und mir das ganze ausgeben lasse bekomme ich: ÍÍÍÍýýýý««««««««

    ´Wo ist der Fehler??? 😕


Anmelden zum Antworten