首页 > 编程知识 正文

char占几个字节数,char类型变量占几个字节

时间:2023-05-03 06:47:06 阅读:178589 作者:1297

前几天,java的char能表示汉字吗? 我被问到了这样的问题。

我想char应该占了一个字节。 汉字是utf-8,占了3个字节。 还有4个字节。 无法显示字符。 对方笑了,让他在后面调查

于是我在网上查了一些资料,举了一个例子:

publicclassbytesofchar { public static byte [ ] getbytes utf8 (charc ) charsetcs=charset.forname ) ' utf-8 '; charbuffercb=char buffer.allocate (1; CB.put(c ); cb.flip (; bytebufferbb=cs.encode(CB ); return bb.array (; }公共静态字节[ ] getbytes gbk (charc ) charsetcs=charset.forname ) (gbk ); charbuffercb=char buffer.allocate (1; CB.put(c ); cb.flip (; bytebufferbb=cs.encode(CB ); return bb.array (; } publicstaticvoidmain (string [ ] args ) throwsunsupportedencodingexception (charc=' a ' ); char cc='中'; String str='a '; String strr='中'; String s='a '; 在system.out.println(utf8: )中编码; system.out.println(char值为英语字符所占的字节长度: ) getbytesutf8(c ).length ); system.out.println(char值为中文字符所占的字节长度: ) getbytesutf8(cc ).length ); System.out.println (代码为GBK ) : ) ); system.out.println(char值为英语字符所占的字节长度: ) getbytesgbk(c ).length ); system.out.println(char值为中文字符所占的字节长度: ) getbytesgbk(cc ).length ); system.out.print ln (------------ ); 在system.out.println(utf8 )中编码; system.out.println(string为英文字母所占的字节长度: ) str.getbytes (utf-8 ).length ); system.out.println(string为中文字符所占的字节长度: ) strr.getbytes (utf-8 ).length ); System.out.println (代码为GBK: ); system.out.println(string为英文字母所占的字节长度: ) str.getbytes (gbk ).length ); system.out.println(string为中文字符所占的字节长: ) strr.getbytes (gbk ).length ); system.out.println(string为英文字母(全角)所占的字节长: ) s.getbytes (gbk ).length ); }结果: UTF8:char值为英文字符的字节长度:1char值为中文字符的字节长度:3编码为GBK (默认编码)。char值为英文字符所占的字节长度:2char值为, 被编码为中文字符所占字节长33602-----------utf8 string为英文字符所占的字节长:3的英文字符所占的字节长:1String为中文字符所占的字节长:2 从占用的字节数来看,上面一个char可以表示一个中文字符,说明占用的字节数与编码相关:

在uft8编码中占3字节;

在GBK编码下占2个字节;

但是,如果char表示英语字符:

在uft8编码中占1字节;

在GBK编码下还是占2个字节;

所以char类型的值不管是英文还是中文都是统一两个字节!

这可能是因为unicode(2 (两个字节)可以表示所有字符,因此一个char类型可以表示所有单个“字符”或char。 utf8编码会转换字节数。

——33543354——————————————————————————33——333333433——3333343333333333343333333334333333433343343334333335 434343334333334333333334333

但是,关于字符串中的一个字符是不同的。 可以理解根据指定的编码utf8字符串在中文和字母下输出,但在GBK下,英文字符占一个字节。 这应该不包括在内。 在此首先区分半角和全角。 在GBK下,全部采用全角(双字节显示),但在我这里是str=”a”。 的a是半角输入,也就是ASCII码,但在全角中s=”a”占2个字节。 因此,str=”a”中只占一个字节的a不是GBK中的a,一个是半角,一个是全角(请看最后一行的输入)。 也就是说,GBK中也有英文数字,但这些英文数字(虽然是全角,但很少使用)占2个字节,与我们一般用输入法输入的半角文字不同。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。