日期:2014-05-18 浏览次数:21735 次
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
*/
------解决方案--------------------
谢谢楼上,你的代码贴的太快了,我心里有压力,呵呵