[C/C++] Cast von Void* auf int auf 64Bit-Plattform

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von myth2806, 29. Januar 2009 .

Schlagworte:
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 29. Januar 2009
    Cast von Void* auf int auf 64Bit-Plattform

    Hi,

    also ich brauche eine Möglichkeit einen void*-Zeiger auf ein Int auf einer 64Bit-Plattform zu casten. Dabei bin ich mir sicher, dass der Wert, der referenziert wird, von einem 4Byte-Int aufgenommen werden kann.
    Ich bekomme das nicht hin. GCC gibt immer nur das hier aus:
    Code:
    cast from pointer to integer of different size
    
    Hat da einer einen Tip für mich? :)

    Grüße
     

  2. Anzeige
  3. #2 29. Januar 2009
    in c oder in c++
    haste es mal mit dem c-standard
    Code:
    int blub = (int) var;
    versucht
    zeig doch mal, wie du es probiert hast
    sonst is das glaub ich nen reinterpret_cast
     
  4. #3 29. Januar 2009
    Ist C unter GNU/Linux.
    So hatte ich es bisher:
    Code:
    int foo(void *bar) {
    
     int x;
     x = (int *) bar;
    }
    
    Das ist die Musterlösung von hier: https://computing.llnl.gov/tutorials/pthreads/ (Brauche das Ganze auch für das Übergeben eines Arguments an einen Thread)

    Das hier hab ich auch versucht weils mir logisch vorkam aber geht auch net:
    Code:
    int foo(void *bar) {
    
     int x;
     x = (int) *bar;
    }
    
    Grüße


    //edit: also mit einem einfachen (int)-Cast funktioniert es zwar, aber ich bekomme weiterhin die Warnung. gibt es nicht noch eine saubere Methode?
     
  5. #4 29. Januar 2009
    Maybe ersteinmal casten, und dann dereferenzieren:

    Code:
    void blubb( void* block )
    {
     int bla = *(int*)block;
    }
    
    int main( void )
    {
     int blubbs = 3;
     blubb(&blubbs);
     return 0;
    }
     
  6. #5 30. Januar 2009
    und wie folgt?
    Code:
     
    int * var;
    int var2;
    void * blub; 
    var = (int *) blub;
    var2 = (*var);
    
     
  7. #6 30. Januar 2009
    ich glaube das geht so:

    void foo( void* bla )
    {
    int *i, z;
    i = bla;
    z = (int) *i;
    }

    gruß
     
  8. #7 30. Januar 2009
    nich ganz... du kommst ja vom zeier auf seinen inhalt nur mit dem *
     
  9. #8 3. Februar 2009
    Code:
     void *leer;
     int *p, i;
     p = (int*) leer; // hast du diese zeile gemeint? ich habs übersehen. casten muss man ja.
     i = *p;
    wäre das so richtig?
     
  10. #9 3. Februar 2009
    weiß nicht genau, ob das richtig ist, aber ich meinte diese zeile :
    Code:
     i = *p;
     
  11. #10 4. Februar 2009
    Du kannst kein 64 Bit Pointer in ein int umwandeln, jedenfalls nicht wenn int als 32 Bit
    Variable behandelt wird, was normalerweiße der Fall ist. Musst glaub ich dafür int64 oder
    ähnliches benutzten, weiß es jetzt nicht genau wie es genau hieß. Wenn du denoch int
    nimmst entsteht "Datenverlust" und es wird bei erneutem umwandeln in einen Pointer
    zu einem undefinierten verhalten führen.

    //Edit: __int64 so wird ein 64 Bit integer definiert.

    Mfg Rushh0ur
     

  12. Videos zum Thema
Die Seite wird geladen...