byte数组是最原始和单纯的字节数据,而string是字节数据在一定编码条件下的组合,所以对于不同的编码格式,同样的byte数组转换后得到的string不仅内容不一样,而且长度也会不一样.
给你个简单例子,下面的代码:
byte[] b = new byte[] { 0x78, 0x90, 0x12, 0x45, 0x78, 0x33 };
Console.WriteLine("UTF8:" + Encoding.UTF8.GetString(b) + "_Length=" + Encoding.UTF8.GetString(b).Length.ToString());
Console.WriteLine("Unicode:" + Encoding.Unicode.GetString(b) + "_Length=" + Encoding.Unicode.GetString(b).Length.ToString());
Console.WriteLine("Ascii:" + Encoding.ASCII.GetString(b) + "_Length=" + Encoding.ASCII.GetString(b).Length.ToString());
Console.WriteLine("GB2312:" + Encoding.GetEncoding(936).GetString(b) + "_Length=" + Encoding.GetEncoding(936).GetString(b).Length.ToString());
输出是:
这样很清楚了吧.string反转byte[]是一样的道理.
另外,不仅仅汉字会影响长度,控制字符,以及在某些编码格式中不予显示的字符,都会影响其在该编码格式中转换时结果字符串的长度.
。。。。。说了句很好听的废话!
追答哎,这玩意设计到数据中是否有汉字的因素,如果没有汉字,都是因为的话,长度一样。一个字母占一个字节,而string中,一个字母长度就是1.两者相等。 如果有汉字的话,情况就不一样了,还设计到编码格式的问题,我记得UTF-8和GBK编码的时候,汉字所占的字节数有的是不一样的,但长度肯定大于1,而汉字在String中的长度也会是1,因此带汉字的byte[]转成string长度肯定不一样。
这个回答满意否?