1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java如何将中文转换成byte数组

java如何将中文转换成byte数组

时间:2020-06-23 22:04:03

相关推荐

java如何将中文转换成byte数组

作为一名程序员,有时候会在想,java是如何将一个中文字符,转化成一个byte数组,是如果从一个byte数组转化成字符的呢? 其实大家都知道utf-8英文占1个字节,中文占3个字节,GBK中文英文都占2个字节,但是我想问,比如utf-8,有谁知道一个中文字符是如何在java中转换成一个byte数组的?

好了,下面进入我们的正题:

例如;中 这个字是如何转换成一个byte数组的?

String str = "中";byte [] bs = str.getBytes("UTF-8");

首先,任意一个字符都定义在统一的unicode编码表中,unicode有65535个字符,几乎包含了所有的语言。所以‘中’在unicode中的编码为\u4E2D对应10进制为20013.

然后看下utf-8计算byte数组的算法:

var4[0] = (byte)(224 | var8 >> 12);

var4[1] = (byte)(128 | var8 >> 6 & 63);

var4[2] = (byte)(128 | var8 & 63);

第0个数组 20013>> 12 结果再和224进行或运算

20013二进制: 0 1 0 0 1 1 1 0 0 0 1 0 1 1 0 1

向右移动12位: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0

224的二进制: 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0

| 运算结果为: 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0

11100100的十进制为: -28

第1个数组 20013>> 6 结果再和63与运算 再和128或运算

20013二进制: 0 1 0 0 1 1 1 0 0 0 1 0 1 1 0 1

向右移动12位: 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0

63的二进制: 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1

& 运算结果为: 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0

128的二进制为: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0

| 运算结果为: 10111000

十进制为: -72

第2个数组 20013& 63 再和128或运算

20013二进制: 0 1 0 0 1 1 1 0 0 0 1 0 1 1 0 1

63的二进制: 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1

& 运算结果为: 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1

128的二进制为: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0

| 运算结果为: 10101101

十进制为: -83

这样3个byte数组的数字分别是 -28 -72 -83 ,大家可以通过java运行来检验下结果是否正确, 其实第0位数组算的是16位字节中的前4位,第1位数组放的5-10位字节,第2位数组放的是11-16位的字节,既 4+6+6 = 16 byte数组按照这种方式切分。

那么下面问大家一个问题:

第0位数组为什么要和224或运算?

第1位数组为什么要和128或运算?

第2位数组为什么要和128或运算?

有知道答案的大家可以在下方留言

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。