我需要能够从Delphi Real48转换为C#double.
我有我需要转换的字节,但我正在寻找一个优雅的解决方案.问题.
以前有人不得不这样做吗?
我需要在C#中进行转换
提前致谢
我已经做了一些狩猎,我找到了一些C++代码来完成这项工作,转换它并且它似乎正在给出正确的答案......如果我理解了这一切虽然:该死的:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以解释它会很棒:D