解决方法
我已经做了一些狩猎,我找到了一些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