精华内容
下载资源
问答
  • java中char到底占几个字节的问题

    万次阅读 2018-06-03 11:01:38
    我一想char不是个字节吗?汉字在utf-8中个字节(还有四字节的),char不能够表示!对方一笑,让我后面查查 所以网上搜了一些资料查查,并做一个例子: public class BytesOfChar { public static byte[]...

    前些天被问到一个问题:java中一个char可以表示一个汉字吗?
    我一想char不是占一个字节吗?汉字在utf-8中占三个字节(还有四字节的),char不能够表示!对方一笑,让我后面查查
    所以网上搜了一些资料查查,并做一个例子:

    public class BytesOfChar {
        public static byte[] getBytesUTF8 (char  c ) {
            Charset cs = Charset.forName("utf-8");
            CharBuffer cb = CharBuffer.allocate (1);
            cb.put (c);
            cb.flip ();
            ByteBuffer bb = cs.encode (cb);
            return bb.array();
            }
        public static byte[] getBytesGBK (char c) {
            Charset cs = Charset.forName("GBK");
            CharBuffer cb = CharBuffer.allocate (1);
            cb.put(c);
            cb.flip ();
            ByteBuffer bb = cs.encode (cb);
            return bb.array();
            }
       public static void main(String[] args) throws UnsupportedEncodingException {
           char c='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.println("-------------------------------");
           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值为英文字符所占字节长度:1
    char值为中文字符所占字节长度:3
    编码为GBK(默认编码):
    char值为英文字符所占字节长度:2
    char值为中文字符所占字节长度:2
    -------------------------------
    编码为UTF8
    String为英文字母所占字节长度:1
    String为中文字母所占字节长度:3
    编码为GBK:
    String为英文字母所占字节长度:1
    String为中文字母所占字节长度:2
    String为英文字母(全角)所占字节长度:2

    首先看char所占字节数,从上面可以看出一个char是可以表示一个中文字符的,而且所占的字节数和编码方式有关:
    在uft8编码下占三个字节;
    在GBK编码下占2个字节;
    但是如果 char表示英文字母:
    在uft8编码下占一个字节;
    在GBK编码下还是占2个字节;
    所以char类型的值不管是英文还是中文都是统一两个字节!
    可能这样做的原因是因为采用Unicode(两个字节)可以表示所有的字符,这样一个char类型就可以表示所有的单个“字符”,也就是所说的char。而对于utf8编码下字节数是进行转换的。
    ———————————————————————————————————_
    但是对于字符串中单个字符则就不一样了,根据指定的编码utf8字符串在中文和字母下输出可以理解,但是在GBK下英文字母占一个字节,这个应该是不包含的;这里首先要区分半角与全角:在GBK下,都是采用全角(两个字节表示),而我这里str=”a”;中的a是半角输入,也就是ASCII码,而在全角下s=”a”是占两个字节的。所以str=”a”中的只占一个字节的a并不是GBK中的a,一个是半角一个是全角(请看最后一行输入)。即GBK中也有字母数字,不过那些字母数字(全角,不过很少用)是占两个字节,和我们正常用输入法输入的半角字符不一样。

    展开全文
  • 我们平常说,java中char占2个字节,可又说汉字在不通的编码格式中所占的位数是不同的,比如... 那么问题来了,在java程序运行的时候,究竟汉字占几个字节呢? -------------------------- 文章抄袭自:http://www...
    我们平常说,java中char占2个字节,可又说汉字在不通的编码格式中所占的位数是不同的,比如gbk中汉字占2个字节,utf8中多数占3个字节,少数占4个。而所有汉字在java程序中我们都可以简单的用 char c = '字' 表示; 那么问题来了,在java程序运行的时候,究竟汉字占几个字节呢?
    --------------------------
    在讨论这个问题之前,我们需要先区分unicode和UTF。
    1、unicode :统一的字符编号,仅仅提供字符与编号间映射。符号数量在不断增加,已超百万。详细:[ https://zh.wikipedia.org/zh-cn/Unicode]
    2、UTF :unicode转换格式 (unicode transformation format) 。定义unicode中编号的编码方式。utf8和utf16便是其中两种实现方式。其中utf8为变长表示,长度可能时1~6个字节;utf16为变长表示,长度可能是2或4个字节。详细:UTF8 [ https://zh.wikipedia.org/zh-cn/UTF-8] UTF16 [ https://zh.wikipedia.org/zh-cn/UTF-16]
    接着,要分清内码(internal encoding)和外码(external encoding)。
    1、内码 :某种语言运行时,其char和string在内存中的编码方式。
    2、外码 :除了内码,皆是外码。
    要注意的是,源代码编译产生的目标代码文件(可执行文件或class文件)中的编码方式属于外码。
    先看一下内码
    JVM中内码采用UTF16。早期,UTF16采用固定长度2字节的方式编码,两个字节可以表示65536种符号(其实真正能表示要比这个少),足以表示当时unicode中所有字符。但是随着unicode中字符的增加,2个字节无法表示所有的字符,UTF16采用了2字节或4字节的方式来完成编码。Java为应对这种情况,考虑到向前兼容的要求,Java用一对char来表示那些需要4字节的字符。所以,java中的char是占用两个字节,只不过有些字符需要两个char来表示。
    详细:
    外码
    Java的class文件采用UTF8来存储字符,也就是说,class中字符占1~6个字节。
    Java序列化时,字符也采用UTF8编码,占1~6个字符。
    总结:
    1、java中内码(运行内存)中的char使用UTF16的方式编码,一个char占用两个字节,但是某些字符需要两个char来表示。所以,一个字符会占用2个或4个字节。
    2、java中外码中char使用UTF8的方式编码,一个字符占用1~6个字节。
    3、UTF16编码中,英文字符占两个字节;绝大多数汉字(尤其是常用汉字)占用两个字节,个别汉字(在后期加入unicode编码的汉字,一般是极少用到的生僻字)占用四个字节。
    4、UTF8编码中,英文字符占用一个字节;绝大多数汉字占用三个字节,个别汉字占用四个字节。
    ----------------------------------------------
    综上,java运行时采用utf16编码,多数汉字占2个字节,一个char就够了,少数占4个字节,需要两个char来表示。
    说明:utf16中,通常汉字2字节,CJKV扩展B区、扩展C区、扩展D区的汉字占4个字节。

    转载于:https://www.cnblogs.com/nevermorewang/p/7808092.html

    展开全文
  • java 中char占几个字节

    万次阅读 2018-07-30 11:23:18
    Java基本类型占用的字节数: 1字节: byte , boolean 2字节: short , char 4字节: int , float 8字节: long , double 注:1字节(byte)=8位(bits)...综上,中文字符在编码中占用的字节数一般是2-4个字节。  ...

    Java基本类型占用的字节数:
    1字节: byte , boolean
    2字节: short , char
    4字节: int , float
    8字节: long , double
    注:1字节(byte)=8位(bits)


    附录:
    1.编码与中文:

    Unicode/GBK: 中文2字节
    UTF-8: 中文通常3字节,在拓展B区之后的是4字节
    综上,中文字符在编码中占用的字节数一般是2-4个字节。

     

    /*

    测试代码:
    System.out.println("中".getBytes("UTF-8").length); ----> 6
    System.out.println("中中".getBytes("UTF-8").length); ----> 9
    System.out.println("中".getBytes("GBK").length); ----> 3
    System.out.println("中中".getBytes("GBK").length); ----> 6
    不好意思,我也不能解释,为什么打印的结果是这样的。大牛飘过还请指摘。

    */

     

    2.char在Java中的字节数:
    char在Java中占用2字节。
    Java编译器默认使用Unicode编码,因此2字节可以表示所有字符。

    测试代码:
    char a= (char) Integer.MAX_VALUE;
    System.out.println((int)a);
    结果输出:
    65535

    以上足以说明char占用的字节数是2字节。

    展开全文
  • java中以unicode编码,所以一个char占2个字节 c/c++一个char占1个字节

    java中以unicode编码,所以一个char占2个字节


    c/c++一个char占1个字节

    展开全文
  • byte: 字节,是计算机文件大小的基本计算单位,最小的可寻址存储单元; bit与Byte之间可以进行换算,其换算关系为:1Byte=8bit(或简写为:1B=8b);在实际应用中一般用简称, 即1bit简写为1b(注意是小写英文字母...
  • Java基本类型占用的字节数: 1字节: byte , boolean 2字节: short , char 4字节: int , float 8字节: long , double 注:1字节(byte)=8位(bits)...综上,中文字符在编码中占用的字节数一般是2-4个字节。  ...
  • C++ string类型占几个字节

    千次阅读 2019-04-23 11:03:38
    C++ string类型占几个字节
  • %x是无符号整数的十六进制,无符号,而\*pchar实际是字符型,于是就有一个类型提升的问题, 假如pchar是无符号数aa,不存在符号位,升级为无符号数还是0xaa,假如pchar是有符号数aa,那么升级为无符号数为:1111 ...
  • Java中基本数据类型占几个字节多少位 1.字节:byte:用来计量存储容量的一种计量单位;位:bit 2.一个字节等于8位 1byte = 8bit char占用的是2个字节 16位,所以一个char类型的可以存储一个汉字。 整型: byte:...
  • C++中的string 类型占几个字节

    万次阅读 2018-06-10 17:14:12
    C++中的string 类型占几个字节一:先看一道面面试题:题目是要求输出:TrendMicroSoftUSCN 然后要求修改程序,使程序能输出以上结果.代码如下:#include <iostream> #include <string>...
  • 我当时就看不明白了,既然只取消了一GET,这@Autowire ... centos7换源 cd /etc/yum.repos.d/ #打开源目录 mv /CentOS-Base.repo /CentOS-Base.repo.bak #备份原来的源wget -O /etc/yum.repos ... PHP -- 8必备...
  • 1、类型 bool -> System.Boolean (布尔型,其值为 true 或者 false) byte -> System.Byte (字节型, 1 字节,表示 8 位正整数,范围 0 ~ 255) sbyte -> System.SByte (带符号字节型, 1 字节,表示 ...
  • Java中Char占用几个字节???

    千次阅读 2019-09-16 10:51:46
    也许你看到的一些书上说Char占用2个字节,但事实真的的是这样吗? 非也: 与编码格式、中英文均有关系 uft8编码下3个字节;...所以GBK编码下:char类型的值不管是英文还是中文都是统一2个字节! ...
  • 浅谈C++中的string 类型占几个字节

    千次阅读 2017-08-22 22:54:18
    本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节 在C语言中我们操作字符串肯定用到的是指针或者数组,这样相对来说对字符串的处理还是比较麻烦...
  • Java中char类型占用多少个字节

    千次阅读 2020-03-09 15:34:35
    Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。统一的字符编号,仅仅提供字符与编号间映射。符号...
  • Java中char,short,int,long占几个字节和多少位 1.字节:byte:用来计量存储容量的一种计量单位;位:bit 2.一个字节等于8位 1byte = 8bit char占用的是2个字节 16位,所以一个char类型的可以存储一个汉字。 整型: ...
  • char在struct中到底占几个字节!!

    千次阅读 2019-08-12 12:49:07
    struct student { char a; int c; short b; };... printf("%d\n", sizeof...这时char所给分配的是4个字节(因为int4个字节) struct student { char a; short b; int c; }; printf("%d\n", sizeof(struc...
  • c++string类型占几个字节

    千次阅读 2016-08-18 09:47:48
    在C语言中我们操作字符串肯定用到的是指针或者数组,这样相对来说对字符串的处理还是比较麻烦的,好在C++中提供了 string 类型的支持,让我们在处理字符串时方便了许多。 首先,我写了一段测试代码,如下所示: ...
  • c++中charchar*类型占字节

    万次阅读 2018-09-01 11:55:37
    char c = 'a'; char *p = &c; char a = 'abcd'; char *d[2]; printf("%d\n",sizeof(c)); //1 printf("%d\n",sizeof(p)); //4 printf("%d\n",sizeof(a)); //1 print...
  • Java基本类型占用的字节数: 1字节: byte , boolean 2字节: short , char 4字节: int , float 8字节: long , double 注:1字节(byte)=8位(bits) 附录: 1.编码与中文: Unicode/GBK: 中文2字节 ...
  • 在C语言中,double、long、unsigned、int、char类型数据所占字节数1.说明:1.以防以后会用到。 2. 和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异。 3. 但有条铁定的原则...
  • byte1个字节8位,取值范围为-2^7~2^7-1 int4个字节32位,取值范围为-2^31~2^31-1 short2个字节16位,取值范围为-2^15~2^15-1 long8个字节64位,取值范围为-2^63~2^63-1 float4个字节...
  • char占1字节,short 2 字节,int 、float、...发现一个问题,以下代码是在win10 64位系统下跑的,理应来说int8个字节,后来我想错了;我建立的工程是win32控制台应用,意味着编译器就是32位的--“int多少...
  • char占1字节,short 2 字节,int 、float、long 都 4 ...发现一个问题,以下代码是在win10 64位系统下跑的,理应来说int8个字节,后来我想错了;我建立的工程是win32控制台应用,意味着编译器就是32位的--“...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,489
精华内容 26,995
关键字:

char类型占几个字节