首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#将二进制小数byte[]型转换成double型,请大家帮帮忙!该如何处理

2012-01-01 
C#将二进制小数byte[]型转换成double型,请大家帮帮忙!假定三个字节放在byte[] data{0x03,0xDF,0xCF},详细

C#将二进制小数byte[]型转换成double型,请大家帮帮忙!
假定三个字节放在byte[] data={0x03,0xDF,0xCF},详细的分别为(这是一位名为gomoku的朋友给出的解释):
0 1 2
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
- + E E E E E s s s s s s s s s s s s s s s s s

0 0 0 0 0 0 1 1 (03)
1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 (DF CF)




第一位 (-) 是这个数的符号,0为正,
第二位(+) 是指数的符号,
EEEEEE 是指数,
ss...s 是小数部分. (一个 1 通常被加做前缀变为 1.sssssssssssssssss)

例如:
03 DF CF = (+)1.1101111111001111 ^( +000011 ) = 1.8742523193359375^3 = 6.58

我想用C#编程将上面的byte[]型数组data换成double型结果x要怎样实现呢?我对熟制转换这部分很糊涂,希望大家帮帮忙了!!小妹在此谢过了!~


[解决办法]

C# code
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*/
[解决办法]
谢谢楼上,你的代码贴的太快了,我心里有压力,呵呵

热点排行