字符与字节有什么区别

(一)“字节”的定义

字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。

(二)“字符”的定义

字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。

(三)“字节”与“字符”

它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:

①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

②UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

③Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。

符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

⑤UTF-32编码中,世界上任何字符的存储都需要4个字节

 

摘评论:针对UTF-8,中国的汉字多达10多万,常用的汉字3500左右[08年统计],如果用3个字节来表示,一共只有2^16(65535)种可能,不足以表示10多万的汉字。所以中日韩的超大字符集是采用的4个字节来表示的,多达6万多个。但是平时使用超大字符集的概率0.01%都不到。所以我们一般认为日常的中文在UTF-8中占三个字节,但实际上也有4个字节的。

(转账:https://blog.csdn.net/andyzhaojianhui/article/details/53785656

------------------------------------------------------------------------------------------------------------------------

1:char“字符”,byte“字节”,bit“位”;

2:1 byte = 8 bit;

3:char 在Java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。

public class Test {

	public static void main(String[] args) {
		String str = "帅";
		char x = '帅';
		byte[] bytes1 = null;
		byte[] bytes2 = null;
		try {
			//utf-8 编码
			bytes1 = str.getBytes("utf-8");
			//unicode编码
			bytes2 = charToByte(x);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		System.out.println("bytes1大小:" + bytes1.length);
		System.out.println("bytes2大小:" + bytes2.length);
	}

	public static byte[] charToByte(char c) {
		byte[] b = new byte[2];
		b[0] = (byte) ((c & 0xFF00) >> 8);
		b[1] = (byte) (c & 0xFF);
		return b;
	}
}

bytes1大小:3
bytes2大小:2

 

java是用unicode来表示字符,“帅”这个中文字符的unicode就是2个字节。

String.getBytes(encoding)方法是获取指定编码的byte数组表示,

通常gbk/gb2312是2个字节,utf-8是3个字节。

如果不指定encoding则取系统默认的encoding。

------------------------------------------------------------------------------------------------------------------------

十六进制数

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

(A,B,C,D,E,F 对应 10,11,12,13,14,15)

计数到F后,再增加1个,就进位。

十六进制数是计算机常用的一种计数方法,它可以弥补二进制数书写位数过长的不足,也用于电视机中。

十六进制数的表示方式为0x开头。

示例:0x6AF = 1711;从右向左开始计算,第一个字符数乘以16的零次方,加上第二个字符数乘以16的一次方,再加上第三个字符数乘以16的二次方。以此类推。

15 * 1 + 10 * 16 + 6 * 256 = 1711

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值