struct in string kopieren



  • ähm... jein.. es ist ne möglcihkeit.

    Allerdings hab ich ja indirekt das gemacht was ich nicht ganz wollte, die zahlen zu phrasen und als zahlen in den string zu schreiben..

    was ich eigentlich dachte wäre das struct als datenmasse zu sehen (bytes) die einfach in dem string abgelegt werden. Sprich quasi unverändert...



  • so vielleicht:

    std::string s(reinterpret_cast<char*>(&msgheader), sizeof(msgheader));
    


  • codec schrieb:

    so vielleicht:

    std::string s(reinterpret_cast<char*>(&msgheader), sizeof(msgheader));
    

    sieht sehr gut aus, funktzt auch.
    eine Frage bleibt allerdings ... wie sieht das andersrum aus?
    also von string zurück zum struct,
    ich habs probiert, allerdings probleme damit

    //gegeben ist
    //string *Msg mit dem umgewandelten stuckt am anfang und danach dem inhalt
    
    MSGHeader header(reinterpret_cast<MSGHeader>(Msg->substr(0,sizeof(header))), sizeof(header));
    

    aber es klappt nicht

    error: invalid cast from type ‘std::basic_string<char, std::char_traits<char>, std::allocator<char> >’ to type ‘MSGHeader’
    


  • evt. MSGHeader* pHeader = reinterpret_cast<MSGHeader*>(Msg->c_str()); ... aber eher nicht ... was du da machst ist insgesamt nicht sehr sinnig ... sry 😉



  • memcpy(&header, s.data(), s.length());
    


  • (D)Evil schrieb:

    evt. MSGHeader* pHeader = reinterpret_cast<MSGHeader*>(Msg->c_str()); ... aber eher nicht ... was du da machst ist insgesamt nicht sehr sinnig ... sry 😉

    von außen gesehen nicht...

    wenn man aber über seine sockets nur strings übertragen kann.. dann schon 😉



  • Über einen Socket kannst du nur char* übertragen ... da ist ein unterschied ... ein großer.



  • download123 schrieb:

    (D)Evil schrieb:

    evt. MSGHeader* pHeader = reinterpret_cast<MSGHeader*>(Msg->c_str()); ... aber eher nicht ... was du da machst ist insgesamt nicht sehr sinnig ... sry 😉

    von außen gesehen nicht...

    wenn man aber über seine sockets nur strings übertragen kann.. dann schon 😉

    Gerade dann würde ich mich nicht abhängig von Compilerversionen und internen Speicherrepräsentationen machen, sondern ein vernünftiges Protokoll definieren ... oder ein bestehendes einsetzen.

    Gruß,

    Simon2.



  • (D)Evil schrieb:

    Über einen Socket kannst du nur char* übertragen ... da ist ein unterschied ... ein großer.

    welchen meinst du?

    Simon2 schrieb:

    Gerade dann würde ich mich nicht abhängig von Compilerversionen und internen Speicherrepräsentationen machen, sondern ein vernünftiges Protokoll definieren ... oder ein bestehendes einsetzen.

    Gruß,

    Simon2.

    Gib doch mal ein beispiel was du mit vernünftiges Protokoll meinst?



  • Hi,

    naja das einfachste hat bereits KasF vorgeschlagen. Es fordert allerdings festgelegte Reihenfolge und Typen der Parameter und bietet keinen "Kompatibilitätsschutz", aber für eine einache Anwendung reicht das erstmal.
    Ansonsten ist bis XML (will das nicht als ideal darstellen, ist aber schon ein recht mächtiges Protokoll) alles möglich.

    Gruß,

    Simon2.


Anmelden zum Antworten