2017-02-23 5 views
1

die folgende Variable Gegeben:Konvertieren von float zu Hex-Format

float myFloat = 0xC0451EB8; 

Wie kann ich C0451EB8 von myFloat bekommen?

Edit: Nicht sicher, warum ich hier ohne Kommentar gewählt werde. Ich frage nicht eine einfache hexadezimale Darstellung eines float oder uint32. Ich kann dies tun. Gegeben über die Variablendefinition und eine [mögliche gemeinsame] Antwort von:

string FloatAsHex(float myFloat) { 
    return BitConverter.ToString(BitConverter.GetBytes(myFloat)); 
} 

FloatToHex(0xC0451EB8); //will output 1F-45-40-4F, not what I expect 
FloatToHex(BitConverter.ToSingle(BitConverter.GetBytes(0xC0451EB8))) //works 

Obwohl die zweiten offensichtlich funktioniert, ich nur Zugriff auf den float-Variable habe.

+0

Sie meinen asa string? –

+0

Ja, als String oder Byte [] - ich möchte nur die Konvertierung rückgängig machen. – nullable

+1

Sie können versuchen, '.ToString (" x ")' verwenden, aber dies würde wahrscheinlich erfordern, um zu verdoppeln oder int –

Antwort

1

Es gibt keine Möglichkeit zu tun, was Sie fragen. Ihr Code speichert den ganzzahligen Wert 0xC0451EB8 oder im Dezimalformat 3225755320 in einer Variablen vom Typ float. Der Integer-Wert hat 32 Bits der Genauigkeit, aber ein float kann nicht 32 Bits der numerischen Genauigkeit darstellen, da einige der 32 Bits des float-Werts dem Exponenten übergeben werden. So wird der Ganzzahlwert 3225755320 auf 3225755392 gekürzt.

Sie können die float zurück in uint umwandeln und dann den Standardmechanismus für die Formatierung als hexadezimalen Zeichenfolgenwert verwenden. Z.B. ((uint)myFloat).ToString("X"). Aber wenn Sie das tun, werden Sie mit dem abgeschnittenen Wert beginnen, und die Ausgabe wird "C0451F00" (oder "0xC0451F00", wenn Sie das Standardhex Specifier-Präfix in Ihrer Formatzeichenfolge enthalten).

Sobald Sie den ursprünglichen Wert abgeschnitten haben, gibt es keine Möglichkeit, ihn wiederherzustellen. Sie können den Prozess nicht umkehren.

+0

Danke Peter, ich habe nicht einmal den simplen Cast auf eine vorzeichenlose Ganzzahl versucht und dann eine formatierte Zeichenkette erhalten. Das funktioniert jetzt. Danke auch für Ihre ausführliche Erklärung, sehr geschätzt. – nullable

0

Die Dokumentation sagt BitConverter.ToString Method (Byte[]) on msdn

Diese verwenden eine Stringdarstellung der Zahl in Hex-Basis zurück. Beispiel (für Byte-Array eine Nummer):

00-01-02-04-08-10-20-40-80-FF 
+0

Sorry, das funktioniert nicht. Dies wird 1F-40-45-1F ausgeben, wo ich erwarten würde, dass es B8-1E-45-C0 ausgibt. – nullable

Verwandte Themen