2010-06-02 4 views
9

Ich habe versucht, eine Zahl mit .NET Int64.Parse-Methode zu analysieren, und es wird keine Zeichenfolge wie "0x3039" akzeptieren, obwohl Sie die Konstante in C# schreiben. In der Dokumentation wird ausdrücklich verhindert, dass die Zeichenfolge ein Präfix "0x" hat, und auch ein angehängtes "h" scheint nicht zu funktionieren.Kann eine der .NET-Parse-Methoden eine Hex-Zeichenfolge mit dem Präfix "0x" verarbeiten?

Um eine Hexadezimalzahl zu analysieren, muss ich die Option System.Globalization.NumberStyles.HexNumber verwenden.

Wenn jemand sicher weiß, dass Int64.Parse() keine Zeichenfolgen mit einem "0x" Präfix akzeptieren kann, lass es mich wissen.

Antwort

16

Die documentation gibt die Ausdrücke für die unterstützten Zahlenformate an und dementsprechend sind weder Präfixe noch Postfixes für Hexadezimalzahlen erlaubt.

Convert.ToInt32(String, Int32) unterstützt die Präfixe 0x und 0X wenn Basis für die verspätete Antwort auf eine alte Frage 16.

+0

Danke für die schnelle Antwort! Genau das, wonach ich gesucht habe. – Triynko

2

Nein, 0x wird nicht akzeptiert. Es gibt sogar eine AllowHexSpecifier-Option, aber aus irgendeinem Grund bedeutet dies nur die a-f-Ziffern und erwartet immer noch, dass Sie den 0x-Teil entfernen.

+3

AllowHexSpecifier erforderlich ist, der Lage sein, zu unterscheiden zwischen 1E3 483 in Hex ist und 1000 mit dem E ist der Anfang des Exponenten angibt. –

1

Leider verwenden, aber diese Frage war die erste, die für „[.net] 0x Präfix“ auf der Suche aufkommt .

Ja, es gibt mindestens eine Reihe von .NET-Standardfunktionen, die Hex-Strings korrekt verarbeiten, die mit dem Präfix "0X" beginnen.

Ab .NET Framework 1.1 akzeptieren die Int64Converter-, Int32Converter-, Int16Converter- und ByteConverter-Klassen im System.ComponentModel-Namespace das hexadezimale 0X-Präfix als Teil der Zeichenfolge.

try 
{ 
    // get integer value of strValue 
    // assuming strValue has already been converted to uppercase e.g. by ToUpper() 
    int intValue; 
    if (strValue.StartsWith("0X")) 
    { 
     // support 0x hex prefix 
     intValue = (Int16)new System.ComponentModel.Int16Converter().ConvertFromString(strValue); 
    } 
    else 
    { 
     // decimal 
     intValue = int.Parse(strValue); 
    } 
} 
catch (FormatException) 
{ 
} 

MSDN-Dokumentation Link: https://msdn.microsoft.com/en-us/library/system.componentmodel.int16converter(v=vs.71).aspx