描述:ASP.NET中如何正确读取由C++中定义的结构写成的二进制文件
说明:现有一用C++中定义的结构写成的二进制文件,结构有两个,类似如下:  
struct  S1
{  
     int  variable1;  
     char  variable2[20];  
}  
struct  S2
{  
     int  variable1;  
     char  variable[12];  
     size_t  variable3;  
     ....  
}  在网上找了不少用C#读二进制文件的,可像这样的实在没找个什么办法,也知道应该用BinaryReader来读,可真不知具体该如何做,试了好多次也不能成功,不知哪位高手能指点一二,谢谢了!

解决方案 »

  1.   

    [StructLayout(LayoutKind.Sequential,CharSet = CharSet.Ansi)]
    struct  S1
    {  
         int  variable1; 
         [MarshalAs(UnmanagedType.ByValArray, SizeConst=20)]
         byte[] variable2;  
    }
      

  2.   

    今天琢磨了一天,终于弄出来了,虽然 520zyb(欲穷千里目,更上一层楼)  的解答晚了点,分还是给你的,别担心,嘿嘿另外补充点,
    [StructLayout(LayoutKind.Sequential,CharSet  =  CharSet.Ansi)]  
    struct    S1  
    {      
             int    variable1;    
             [MarshalAs(UnmanagedType.ByValArray,  SizeConst=20)]  
             byte[]  variable2;      
    }
    只是对结构做了基本正确的定义,可问题关键如何正确读取还是没能说明,也许是没看清问题吧,嘿嘿~~读取时我是用BinaryReader、BitConverter做到的,另外在结构定义中还要注意变量应定义为public的,还要定义能将字节数组转化为此结构的构造函数,最好也定个operator可以用(S1)Byte[]将字节数组转化为此结构,这样就可以对引结构的各属性与方法进行访问了 :)
      

  3.   

    今天琢磨了一天,终于弄出来了,虽然 520zyb(欲穷千里目,更上一层楼)  的解答晚了点,分还是给你的,别担心,嘿嘿另外补充点,
    [StructLayout(LayoutKind.Sequential,CharSet  =  CharSet.Ansi)]  
    struct    S1  
    {      
             int    variable1;    
             [MarshalAs(UnmanagedType.ByValArray,  SizeConst=20)]  
             byte[]  variable2;      
    }
    只是对结构做了基本正确的定义,可问题关键如何正确读取还是没能说明,也许是没看清问题吧,嘿嘿~~读取时我是用BinaryReader、BitConverter做到的,另外在结构定义中还要注意变量应定义为public的,还要定义能将字节数组转化为此结构的构造函数,最好也定个operator可以用(S1)Byte[]将字节数组转化为此结构,这样就可以对引结构的各属性与方法进行访问了 :)
      

  4.   

    今天琢磨了一天,终于弄出来了,虽然 520zyb(欲穷千里目,更上一层楼)  的解答晚了点,分还是给你的,别担心,嘿嘿另外补充点,
    [StructLayout(LayoutKind.Sequential,CharSet  =  CharSet.Ansi)]  
    struct    S1  
    {      
             int    variable1;    
             [MarshalAs(UnmanagedType.ByValArray,  SizeConst=20)]  
             byte[]  variable2;      
    }
    只是对结构做了基本正确的定义,可问题关键如何正确读取还是没能说明,也许是没看清问题吧,嘿嘿~~读取时我是用BinaryReader、BitConverter做到的,另外在结构定义中还要注意变量应定义为public的,还要定义能将字节数组转化为此结构的构造函数,最好也定个operator可以用(S1)Byte[]将字节数组转化为此结构,这样就可以对引结构的各属性与方法进行访问了 :)