Frage zu Buffer Zeiger !!



  • Hi,

    ich möchte mit CAsyncSocket ein int Zahl an einen zweiten PC per TCP übermitteln.
    Dazu will ich die MFC CAsyncSocket verwenden. Die Beispiele sind alle für CString
    ausgelegt und schauen beim senden so aus:

    CAsyncSocket m_mysocket;
    CString myCString="hallo";
    m_mysocket.Send(LPCTSTR(myCString),längevonCString);

    nun muss ich also beim senden einen Zeiger übergeben und dessen Länge.
    Also dachte ich für Integer:

    int meineint = 3;
    int *meinzeiger = &meineint;
    m_mysocket.Send(meinzeiger,1);

    Mach ich da Fehler, da int 32 Bit ist ? Der Empfang scheitert auf jeden Fall ...
    Das Senden nicht.

    Irgendwo mach ich da einen Gedankenfehler ??

    Gruß
    THenoname



  • "Send" erwartet einen Zeiger auf die Daten und dann noch die Länge.
    Also solltest Du folgendes machen:

    int meineint = 3; 
    m_mysocket.Send(&meinzeiger, sizeof(meineint));
    


  • ist sizeof nicht 1 ?



  • nein sizeof ist 4, da ein int für gewöhnlich(aber halt nicht immer, deshalb auch das sizeof) 32-bit breit ist.



  • Wie jetzt ? nicht immer ?
    Wie soll ich denn SizeOf an die empfangende Anwendung schicken ?
    Wenn die Größe variabel ist, kann ich keinen festen Empfangsbuffer festlegen.

    Gruß
    thenoname



  • die Größe ist schon fest (sprich: jeder int in deinem Programm wird die selbe Größe haben). Allerdings können verschiedene Compiler unterschiedliche Datendarstellungen habe - und demzufolge unterschiedliche Werte beim sizeof zurückgeben.



  • In anderen Compilern ist int beispielsweise nur 16 Bit lang. Wenn du dein Programm dort compilierst und du eine 32Bit-Zahl übergibst, gibt es Probleme.



  • Ok,

    ich nehm mal an, das MFC immer denselben Compiler hat. (?)
    Davon abgesehen ... bringts was, wenn ich zu Anfang in der Init folgendes mache:

    int meineint = 4;
    int meineintSize= SizeOf(meineint);

    Oder brauchts das bei MFC nicht ?
    Kann man den Compiler "aus versehen" auf 16 Bit umschalten ? Glaube nicht.

    Was die wichtigere Frage ist: Wenn ich ein Array übergebe von z.B. meineint[3]
    sind das dann 3x4=12 als sizeof(meineint) oder kommt da noch Adressierung dazu ?


Anmelden zum Antworten