已知文件的第37字节开始,一共8个字节存储了一个 double 类型的数据,如何读出?
我已经读出8个字节,但不知道如何转换为 double 类型数据。代码如下:System.IO.FileStream fStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
fStream.Position = 36; byte[] bytes = new byte[8];
fStream.Read(bytes,0, 8);double v1 = Convert.ToDouble(bytes);

解决方案 »

  1.   

    string s = "";
    for(int i=0; i<8; i++)
    {
       s += bytes[i];
    }double d = double.Parse(s);顺便说一下,如果不是一定得把数据存储得那么别扭的话,改变一下文件存储方式吧,那样处理起来也简单明了一些
      

  2.   

    to zhouyinhui(周银辉) :
    你的答案是错误的!8个字节内容(从高位到地位依次16进制):41 1F 85 AE 5B 16 EE 50
    它代表的是浮点值:516459.588954662而用你的方式得到的是:8.0238229117413335E+18以下是使用C++方式解决:double x;
    char *f = (char *) &x;
    f[0] = 0x41;
    f[1] = 0x1F;
    ...
    f[7] = 0x50;这时,x已经为516459.588954662
     
    另外,这个文件是其它商业公司应用广泛的地图文件: ESRI公司的 .shp 文件。我需要不使用它们的API,直接从文件中读取部分信息。
      

  3.   

    我已经找到两种可行方法:
    1、用C++创建一个动态连接库,由C#调用,这样可以使用上面的方式获取到浮点值(已试验成功)。2、找到了C#中的转换类 System.BitConverter
    byte[] t;
    ..
    double v = System.BitConverter.ToDouble(t);方法2是其他人告诉我的。否则,我就会使用方法1了!
      

  4.   

    上面写错误,如下纠正:double  x;  
    char  *f  =  (char  *)  &x;  
    f[0]  =  0x50;  
    f[1]  =  0xEE;  
    ...  
    f[7]  =  0x41;  
    double  v  =  System.BitConverter.ToDouble(t, 0);