none
Convert.ToInt64 bringt Fehler für UInt64 RRS feed

  • Frage

  • Debug.Print(Convert.ToInt64("8DB47A36B32EDE3888C", 16))
    Warum bringt das obige den Fehler "Value was either too large or too small for a UInt64."

    Laut Doku sollte das doch in ein 64bit signed integer konvertiert werden und in binär Schreibweise ist der obige Hexwert
    1000110110110100011110100011011010110011001011101101111000111000
    Also genau 64bit lang.

    Was habe ich da wieder mal nicht verstanden?

    Danke
    Reinhard
    Mittwoch, 16. Dezember 2009 23:43

Antworten

  • Hallo ReinhardH!

    Hier: http://msdn.microsoft.com/de-de/library/yk8t68tb.aspx steht

    OverflowException

    value, der eine nicht zur Basis 10 gehörende Zahl mit Vorzeichen darstellt, weist ein negatives Vorzeichen als Präfix auf.

    – oder –

    Der Rückgabewert ist kleiner als Int64.MinValue oder größer als Int64.MaxValue.


    Int64.MaxValue ist: Der Wert dieser Konstanten ist 9.223.372.036.854.775.807, entspricht hexadezimal 0x7FFFFFFFFFFFFFFF.
    0x8DB47A36B32EDE3888C ist größer als 0x7FFFFFFFFFFFFFFF.

    Darum die Fehlermeldung!


    Viele Grüße Catbert
    • Bearbeitet Catbert Donnerstag, 17. Dezember 2009 06:02 Schreibfehler
    • Als Antwort markiert ReinhardH Donnerstag, 17. Dezember 2009 10:27
    Donnerstag, 17. Dezember 2009 06:01

Alle Antworten

  • Hallo ReinhardH!

    Hier: http://msdn.microsoft.com/de-de/library/yk8t68tb.aspx steht

    OverflowException

    value, der eine nicht zur Basis 10 gehörende Zahl mit Vorzeichen darstellt, weist ein negatives Vorzeichen als Präfix auf.

    – oder –

    Der Rückgabewert ist kleiner als Int64.MinValue oder größer als Int64.MaxValue.


    Int64.MaxValue ist: Der Wert dieser Konstanten ist 9.223.372.036.854.775.807, entspricht hexadezimal 0x7FFFFFFFFFFFFFFF.
    0x8DB47A36B32EDE3888C ist größer als 0x7FFFFFFFFFFFFFFF.

    Darum die Fehlermeldung!


    Viele Grüße Catbert
    • Bearbeitet Catbert Donnerstag, 17. Dezember 2009 06:02 Schreibfehler
    • Als Antwort markiert ReinhardH Donnerstag, 17. Dezember 2009 10:27
    Donnerstag, 17. Dezember 2009 06:01
  • Ein 64bit signed integer hat maximal 64 Bit. Das sind 8 Byte bzw. 16 Hexadezimalzeichen. Bei dir sind es aber 19 Hexadezimalzeichen. Das bringt einen Überlauf (overflow).

    --
    Peter
    • Als Antwort vorgeschlagen Peter Fleischer Donnerstag, 17. Dezember 2009 08:25
    Donnerstag, 17. Dezember 2009 08:24
  • Hallo Catbert
    Besten Dank
    Reinhard
    Donnerstag, 17. Dezember 2009 10:27
  • Besten Dank auch Dir Peter.
    Reinhard
    Donnerstag, 17. Dezember 2009 10:28