Hilfe IntToHex



  • Guten Tag,

    ich bin am Verzweifeln und Blicke so langsam nicht mehr durch,
    ich möchte eine

    unsigned long int IWert = 4294967295
    

    in eine HEX wert umwandeln.

    Mit der Funktion IntToHex habe ich es nicht geschaft.
    Dann habe ich folgendes Probiert

    char s[256];
     sprintf (s, "%08lx", IWert);
    

    hat leider auch nicht funktioniert.

    Gibt es noch einen andere möglichkeit ???

    mfg Kasten



  • ich sehe keinen fehler. und bei meinem versuch hat es ohne problem geklappt. habe einfach deinen code kopiert und ausgeführt - zack hatte ich die hex-zahl. irgendwas anderes muss nicht stimmen. was gibt es denn konkret für ein problem/fehler?

    oli



  • Hallo Olli,

    also ich bekomme immer nur ffffffff zurück.
    Und dieses wundert mich.
    Wenn ich eine kleinere Zahl als 4294967295 nehme dann klapt es.
    Aber bei den grossen Zahlen leider nicht !!!



  • Ein Integer hat 4 Byte und kann nicht größer sein als 4294967295.



  • Hat jemand eine IDEE oder einen Lösungsansatz wie ich diese
    zahl trozdem umwandeln kann ?

    Gruss Karsten



  • Warum muss du eine so große Zahl umwandeln?


  • Mod

    Hallo

    wandle diese Zahl doch per Hand um
    (ist eigentlich total einfach)

    MfG
    Klaus



  • hallo karsten!
    also, dass du ffff ffff zurück bekommst, ist doch sehr erfreulich weil richtig!
    wie du aber siehst, ist das die größte unsigned long-Zahl, die es gibt. weist du IWert eine größere Zahl zu, konvertiert IntToHex die Zahl zwar auch, ignoriert aber alle Stellen vor den letzten acht, da int-werte nun mal nicht größer sein können als ffffffff.
    wenn du größere zahlen brauchst, solltest du auf den __int64-typ umsteigen, der im BCB definiert ist und werte bis 2^63-1 oder als unsigned bis 2^64-1 aufnimmt. das sollte dann vielleicht genügen.
    Beispiel:

    __int64 IWert = 4294967295i64;        // Suffix muss laut BCB-Hilfe wohl sein...
    AnsiString hex = IntToHex(IWert,16);  // auf 16 Stellen ausgeben
    
    // Es kommt heraus: hex = 00000000FFFFFFFF, also genau ffff ffff nur mit führenden Nullen.
    

    gibst du mal eine größere zahl ein, z.b. IWert+1, bekommst du:

    __int64 IWert2 = IWert+1;        
    hex = IntToHex(IWert2,16);  
    
    // Es kommt heraus: hex = 0000000100000000, so wie es sein muss.
    

    ich hoffe, das hilft dir weiter. viel spaß noch,

    oli



  • Danke für den Holzhammer hat geklappt,

    Danke


Anmelden zum Antworten