A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王新阳 中级黑马   /  2012-11-18 18:08  /  2352 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
代码执行完成后为什么i=13,j却等于10?

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

8 个回复

倒序浏览
字母是一个字节,汉字是两个字节
string strTmp = "abcdefg某某某"; //7个字母7字节,3个汉字6字节---->13字节

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
一个汉字两个字节,一个英文一个字节,int i = System.Text.Encoding.Default.GetBytes(strTmp).Length; String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组,刚好输出13个字节,而求的是字符长度,也就是字符和字节的区别,希望能帮到你.

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
一个字母等于一个字节,一个汉字等于两个字节
所以执行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;
回复 使用道具 举报
System.Text.Encoding.Default.GetBytes()是将字符串转换为byte数组,即i是求字节长度。每个英文字母一字节,汉字两字节,所以i=13
而j是求原来的字符串长度。所以j=10

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
汉字占两个字节,字母占一个字节
回复 使用道具 举报
王彬 中级黑马 2012-11-19 12:37:44
7#
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
//获取与系统区域设置中的默认 ANSI 代码页相关联的编码,按照指定编码类型把字符串指定到指定的Byte数组 ,而字符串是占两个字符,所以会是13将一组字符编码为一个字节序列
int j= strTmp.Length;
j=10
回复 使用道具 举报
int i=System.text.encoding.Default.GetBytes(strTmp).Length
是转换成字节数组,汉子占2个字节,。
而字符串.length就是字符串长度,汉子也按一个算
回复 使用道具 举报
吴新 中级黑马 2012-11-26 14:02:56
9#
长知识了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马