Je dois convertir des nombres hexadécimaux de 8 octets en virgule flottante en C#. Par exemple:Conversion hexadécimal en virgule flottante IEEE 754 en C#
4030000000000000 devrait être 16,0
C0622EB860000000 devrait être -14,46
4090000000000000 devrait être 1024,0
J'ai trouvé ce code qui semble fonctionner, mais il ne place pas la pointez correctement pour les nombres supérieurs à 10 et inférieurs à -10. Par exemple, -14,46 est affiché sous la forme -1,4546. Quel est le problème avec le 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();
}
Il n'y a rien de mal avec le code. Il imprime également l'exposant ie: E + 008. Par exemple, 10.0 peut être imprimé comme 1.0E + 001 – Deolus
Si vous ne voulez pas la partie exponentielle, retirez-la du 'formatter'. IE: changez-le en '" {0,20} {1,27} ";' – Deolus
remercie Deolus! Ça marche! J'aurais voté votre réponse, mais je ne vois pas comment. – Marian