我在读写一个二进制文件时,遇到了一下的问题,请帮忙解决,代码如下:
buffer=new byte[100]; FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.None)BinaryReader reader = new BinaryReader(fs);
reader.Read( buffer,0,100);

在原文件中,存贮的是各种类型的数据,例如有int型(占四个字节),double型(占八个字节)的,还有string(占16个字节),并且分布是随机分布的,我想将文件中的内容先读入一个内存数组中(buffer[]),然后再将内存中的数据转化为相应的数据类型,例如buffer中的第1-4字节代表一整数(int型),则将其赋予一整型变量,第5-12字节代表一double型,则将其赋予一double型变量。那么现在的问题是:如何拆分buffer数组,将相应位置区间的数据赋予相应的变量类型,例如,将第1-4字节赋予一整型变量,将5-12字节赋予一double变量。还有string变量怎么赋值,恳请各位高手不吝赐教,或者谁以前写过类似的代码借鉴一下,不胜感激!!!!

解决方案 »

  1.   

    算法,不晓得是不是,自己改循环吧。
    static void Main(string[] args)
    {
    try
    {
    byte[] buffer=new byte[28];
    string temp="0x";
    string str1;
    int i1;
    using(FileStream fs = new FileStream("1.exe", FileMode.Open, FileAccess.Read, FileShare.None))
    {
    BinaryReader reader = new BinaryReader(fs);
    reader.Read(buffer,0,28);
    for(int i=0;i<4;i++)
    {
    temp+=buffer[i].ToString("X");
    }
    i1=Convert.ToInt32(temp,16);  //interger
    char[] tempchar=new char[16];
    for(int i=16;i<28;i++)
    {
    tempchar[i-16]=(char)buffer[i];
    }
    str1=new string(tempchar);  ///string
    reader.Close();
    }
    Console.WriteLine("interger is {0},string is {1}.",i1,str1);
    Console.Read();
    }
    catch (Exception e1)
    {
    Console.WriteLine(e1.Message);
    Console.Read();
    }
    }
      

  2.   

    多谢gdami(糖米)的指点!!不过,现在还有一个小问题,在赋Double变量时,好像无法指定基数,所以不知道怎么将16进制表示的字符串的转化为Double了.真的怪自己很笨!还望你多多指点!!*^_^*
      

  3.   

    double需要分开读取吧。 因为“小数点”的16进制是“20”,可以拿这个来当作分割点,两边分别读取为int。 再拼起来(拼成string,string再转成double)。 这个可以自己设计一个方法来完成。