日期:2014-05-18 浏览次数:21559 次
using System; class Program { static void Main() { byte[] data = { 0x03,0xDF,0xCF }; Console.WriteLine(ToSingle3(data, 0)); } // 返回由字节数组中指定位置的三个字节转换来的单精度浮点数。 static float ToSingle3(byte[] value, int startIndex) { if (value == null) throw(new ArgumentNullException()); if (startIndex < 0 || startIndex > value.Length - 3) throw(new ArgumentOutOfRangeException()); double t = 1; // 尾数 double s = 0.5; byte b = value[startIndex + 1]; for (int i = 0; i < 8; i++) { if ((b & 0x80) != 0) t += s; b <<= 1; s /= 2; } b = value[startIndex + 2]; for (int i = 0; i < 8; i++) { if ((b & 0x80) != 0) t += s; b <<= 1; s /= 2; } b = value[startIndex]; int sign0 = (b & 0x80) == 0 ? 1 : -1; // 尾数的符号 int sign1 = (b & 0x40) == 0 ? 1 : -1; // 指数的符号 int E = (b & 0x3F) * sign1; // 指数 return (float)(Math.Pow(t, E) * sign0); } } /* 程序输出: 6.583914 */
------解决方案--------------------
谢谢楼上,你的代码贴的太快了,我心里有压力,呵呵