我在用BinaryReader读取二进制文件的时候遇到一个问题,文件头有一个Uint数,后面接一个字符'#',再后存储一个short数.我想直接读取这个short数,试着把前面的数据用reader.ReadBytes(6)跳过,但是这样得到的结果不对,后来我让reader只跳过5个字节即reader.ReadBytes(5);,这时我再调用read.ReadInt16();就得到了正确的结果.我不明白的是C#里uint型变量占用4个字节,char型占用2个字节.可是为什么我让reader跳过这6个字节得不到正确的结果,而必须跳过5个字节?我改了下程序,跳过4个字节读取char,得到的结果正确,我想问题在char型变量上,难道它在C#中只占用一个字节吗?

解决方案 »

  1.   

    是否所有的char都只占一个字节?还是有几个特例是只占用一个字节的?我定义了一个字符数组,只包含一个char元素#,用encoding算数组长度是2个字节,奇怪了.
      

  2.   

    刚才又搜索了一下,有文章说C#中的char变量只占用一个字节,可是.net里不是用unicode来标识字符和字符串吗?这是怎么回事?而且MSDN里也很明确的说明char是16位的啊,晕了.请高手指点~~
      

  3.   

    已解决,encoding.default返回的是一个字节,C#中还有单字节字符和双字节字符的区别,长见识了.