黑马程序员技术交流社区

标题: 一道面试小问题,求指教 [打印本页]

作者: 王新阳    时间: 2012-11-18 18:08
标题: 一道面试小问题,求指教
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
代码执行完成后为什么i=13,j却等于10?
作者: 种生祥    时间: 2012-11-18 18:40
字母是一个字节,汉字是两个字节
string strTmp = "abcdefg某某某"; //7个字母7字节,3个汉字6字节---->13字节
作者: 崔晓聪    时间: 2012-11-18 18:41
一个汉字两个字节,一个英文一个字节,int i = System.Text.Encoding.Default.GetBytes(strTmp).Length; String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组,刚好输出13个字节,而求的是字符长度,也就是字符和字节的区别,希望能帮到你.
作者: 韩俊    时间: 2012-11-18 20:51
一个字母等于一个字节,一个汉字等于两个字节
所以执行int i=System.text.encoding.Default.GetBytes(strTmp).Length时,求字节的长度,即7个字母7个字节,3个汉字6个字节,一共13个字节,所以i=13;
当执行int j=strTmp.Length时,求字符串的长度,一个字母即是一个字符的长度,一个汉字也是一个字符的长度,所以7个字母字符长度为7,三个汉字的字符长度为3,所以j=10;
作者: 李孟瞧    时间: 2012-11-18 21:07
System.Text.Encoding.Default.GetBytes()是将字符串转换为byte数组,即i是求字节长度。每个英文字母一字节,汉字两字节,所以i=13
而j是求原来的字符串长度。所以j=10
作者: 韩温华    时间: 2012-11-18 22:28
汉字占两个字节,字母占一个字节
作者: 王彬    时间: 2012-11-19 12:37
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
//获取与系统区域设置中的默认 ANSI 代码页相关联的编码,按照指定编码类型把字符串指定到指定的Byte数组 ,而字符串是占两个字符,所以会是13将一组字符编码为一个字节序列
int j= strTmp.Length;
j=10
作者: 黑马-许泽宇    时间: 2012-11-26 09:39
int i=System.text.encoding.Default.GetBytes(strTmp).Length
是转换成字节数组,汉子占2个字节,。
而字符串.length就是字符串长度,汉子也按一个算
作者: 吴新    时间: 2012-11-26 14:02
长知识了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2