请看代码
                   tBytes = memoryStream.ToArray();
                    string strbts = Encoding.GetEncoding("gb2312").GetString(tBytes);                    byte[] bts = Encoding.GetEncoding("gb2312").GetBytes(strbts);为什么bts和tBytes会不同呢?各位大侠遇到过么?

解决方案 »

  1.   

      string strbts = Encoding.GetEncoding("gb2312").GetString(tBytes);
    是把tBytes中的数据每两个byte转换成一个Unicode编码字符,当遇到byte组合不存在相应的Unicode编码字符时,就用0x003f代替,ASCII编码字符为'?'。 byte[] bts = Encoding.GetEncoding("gb2312").GetBytes(strbts);
    是把Unicode编码字符转换为GB2312汉字编码和ASCII编码的字节序列,对于ASCII编码字符就把高位字节的0x00省略掉,只保留低位字节。如byte数组:{ 1, 2, 233, 4, 129, 6 }
    编码成Unicode编码字符为:{0x0001, 0x0002, 0x003f, 0x003f}
    再把它转换为byte数组为:{0x01, 0x02, 0x3f, 0x3f}
      

  2.   

    tBytes = memoryStream.ToArray();
     你的代码不全 看不出tBytes是什么类型,
    bts是一个byte类型的两类型类型不同
      

  3.   

    哥,那我怎么样才能把一个byte数组转换成string,然后再从string转换成byte数组,并且保证转换前后的byte数组是一样的呢?
      

  4.   

    这要看你的byte数组是不是合法的字符数据啦,如果包含有我的例子中的这种情况,谁也没办法啊。
    你可以设一个断点,看看tBytes中的数据对不对