Ich muss 8 Byte lange Hex-Zahlen in Fließkommazahl in C# konvertieren. Zum Beispiel:Konvertieren von Hex in IEEE 754 Gleitkomma in C#
4030000000000000 sollte 16.0 sein
C0622EB860000000 -14,46
4090000000000000 sein sollte 1024,0
ich diesen Code gefunden haben, scheint zu funktionieren, aber es stellen nicht das sein sollte Punkt korrekt für Zahlen größer als 10 und kleiner als -10. Zum Beispiel wird -14,46 als -1,4546 angezeigt. Was ist falsch an dem Code?
const string formatter = "{0,20}{1,27:E16}";
// Reinterpret the long argument as a double.
public static void LongBitsToDouble(long argument)
{
double doubleValue;
doubleValue = BitConverter.Int64BitsToDouble(argument);
// Display the argument in hexadecimal.
Console.WriteLine(formatter, String.Format("0x{0:X16}", argument),
doubleValue);
}
public static void Main()
{
Console.WriteLine("This example of the BitConverter.Int64BitsToDouble("
+"long) \nmethod generates the following output.\n");
Console.WriteLine(formatter, "long argument","double value");
Console.WriteLine("-------------");
// Convert long values and display the results.
LongBitsToDouble(unchecked((long)0x4030000000000000)); //16.0
LongBitsToDouble(unchecked((long)0xC0622EB860000000)); //-14.46
Console.ReadKey();
}
Es gibt nichts falsch mit dem Code. Es gibt auch den Exponenten aus, zB: E + 008. Zum Beispiel kann 10.0 als 1.0E + 001 – Deolus
gedruckt werden. Wenn Sie den Exponententeil nicht möchten, entfernen Sie ihn aus dem 'Formatierer'. IE: ändere es in '" {0,20} {1,27} ";' – Deolus
danke Deolus! Das funktioniert! Ich hätte Ihre Antwort gewählt, aber ich kann nicht sehen, wie. – Marian