例如一个包含了"123abc中国人"一串字符的"Q.txt"文件映射起来,在利用 Marshal.Copy()函数读取文件内容的时候怎么样才能准确地取出该字串中的每一个字符的值啊?我用Marshal.Copy(fHanel,tempChar,0,1)时读出的是"12"的二进制值,也就是说一次读出了两个字符,(tempChar 为char[]),我应该怎么做才能准确地读出里面的值呢?即: 1,2,3,a,b,c,中,国,人  依次读出? 

解决方案 »

  1.   

    我是个新手啊,觉得奇怪的是,用BinaryWrite写一个汉字"我",得到的是 CE D2,
    然后BinaryRead出来是 25105 "我", 可是 CE D2 正过来是52946否,反过来是否53966 ,这个25105 是怎么来的?  我怎么知道CE D2 是一个汉字而不是两个单独的字符 CE 和D2呢?求教,谢谢!
      

  2.   

    ASSIIC码没有大于128的,所以汉字肯定是大于128的.CE = 206 > 128所以是汉字,你就需要在读取下一位然后转换成汉字,不过这里你要注意一个问题UTF32编码是4位,UTF7编码是5位,UTF8编码是3位.一般使用Default就行了.
      

  3.   

    太感激fuadam 了,可是我还想知道第一个问题的方法, 我可不可以把一堆东西取出来,然后一个字节一个字节的按照fuadam 说的那样子去判断?可是这样一来,判断将占去很大的时间,而使用内存映射不是为了节省时间吗? 有没有什么更好 的方法? 谢谢!
      

  4.   

    StringBuilder sb = new StringBuilder();
                Stream fread = new FileStream(@"c:\Q.txt", FileMode.Open);            short b = -1;                   //用来接收读出的字节
                byte[] chinese = new byte[2];   //byte数组大小根据编码格式定            while ((b = (byte)fread.ReadByte()) != -1)
                {
                    if (b <= 128)
                        sb.Append((char)b);
                    else
                    {
                        chinese[0] = (byte)b;
                        chinese[1] = (byte)fread.ReadByte();
                        
                        sb.Append(BitConverter.ToChar(chinese, 0));
                    }
                }
    这样写运行速度快还节省内存,你试试吧