我需要能够从 Delphi Real48 转换为 C# double。

我有需要转换的字节,但我正在寻找一个优雅的解决方案。到问题。

以前有人必须这样做吗?

我需要在 C# 中进行转换

提前致谢

最佳答案

我已经做了一些狩猎,我找到了一些 C++ 代码来完成这项工作,将其转换,它似乎给出了正确的答案......尽管我理解这一切该死的:S

    private static double Real48ToDouble(byte[] real48)
    {

        if (real48[0] == 0)
            return 0.0; // Null exponent = 0

        double exponent = real48[0] - 129.0;
        double mantissa = 0.0;

        for (int i = 1; i < 5; i++) // loop through bytes 1-4
        {
            mantissa += real48[i];
            mantissa *= 0.00390625; // mantissa /= 256
        }


        mantissa += (real48[5] & 0x7F);
        mantissa *= 0.0078125; // mantissa /= 128
        mantissa += 1.0;

        if ((real48[5] & 0x80) == 0x80) // Sign bit check
            mantissa = -mantissa;

        return mantissa * Math.Pow(2.0, exponent);
    }

如果有人可以解释它会很棒:D

关于c# - 将Delphi Real48转换为C#double,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2506942/

10-13 03:40