C# 在C语言中将十六进制转换为IEEE 754浮点#

C# 在C语言中将十六进制转换为IEEE 754浮点#,c#,hex,ieee-754,C#,Hex,Ieee 754,我需要将8字节长的十六进制数转换为C#中的浮点。 例如: 4030000000000000应该是16.0 C0622EB860000000应为-14.46 409000000000000应该是1024.0 我发现这段代码似乎很有效,但它并没有说明问题 对于大于10和小于-10的数字正确。比如,, -14.46显示为-1.4546。代码有什么问题 const string formatter = "{0,20}{1,27:E16}"; // Reinterpret the long argume

我需要将8字节长的十六进制数转换为C#中的浮点。 例如:

4030000000000000应该是16.0

C0622EB860000000应为-14.46

409000000000000应该是1024.0

我发现这段代码似乎很有效,但它并没有说明问题 对于大于10和小于-10的数字正确。比如,, -14.46显示为-1.4546。代码有什么问题

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();
}

试试下面,第二个数字的小数位是错误的。我颠倒了字节

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<List<byte>> inputs = new List<List<byte>>() {
                 new List<byte>() {0x40, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
                 new List<byte>() {0xC0, 0x62, 0x2E, 0xB8, 0x60, 0x00, 0x00, 0x00},
                 new List<byte>() {0x40, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
        };
            foreach (List<byte> input in inputs)
            {
                input.Reverse();
                Console.WriteLine(BitConverter.ToDouble(input.ToArray(),0));
            }
            Console.ReadLine();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
列表输入=新列表(){
新列表(){0x40,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
新列表(){0xC0,0x62,0x2E,0xB8,0x60,0x00,0x00,0x00},
新列表(){0x40,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
};
foreach(在输入中列出输入)
{
input.Reverse();
WriteLine(BitConverter.ToDouble(input.ToArray(),0));
}
Console.ReadLine();
}
}
}

代码没有问题。它还打印出指数,即:E+008。例如,10.0可以打印为1.0E+001。如果不需要指数部分,请将其从
格式设置程序中删除。IE:将其更改为
“{0,20}{1,27}”谢谢Deolos!真管用!我本来会投你的票的,但我不知道怎么投。