zoukankan      html  css  js  c++  java
  • utf8和字节数组的转换

    ps:int转byte只会取低八位
    如228的二进制是 前面一堆0,然后11100100
    转为byte就变成11100100,补码就是-128+64+32+4 = -28
    Stream相关类传输时候,返回的是int,传输可能是byte数组。注意

        System.out.println(Arrays.toString("中".getBytes()));
        //[-28, -72, -83]
    
    utf8转换工具会得到中
    

     
    基础知识:
    unicode转换为utf-8编码的规则
    Unicode         UTF-8
    0000-007F      0xxxxxxx
    0080-07FF     110xxxxx 10xxxxxx
    0800-FFFF    1110xxxx 10xxxxxx 10xxxxxx

     
    如果字符对应编码值小于0x7F,则转换该为1个byte,最高位为0
    (0x7F转换为二进制为111111,7个1。不会出现最高位为1,最高位为1肯定大于7F。),该字符对应的二进制替换X,不足7位前面高位加0

    编码值在0080到07FF字符,会转换为2个字节,并且第一个字节以110开头,第二个字节以10开头,字符对应的编码值转换为2进制后的数据,填充X。不足位数的高位加0

    编码值在0800到FFFF字符,会转换为3个字节,并且第一个字节以1110开头,后面字节以10开头,字符对应的编码值转换为2进制后的数据,填充X。不足位数的高位加0

    也就是说大于07XX编码值的字符,转换为字节时,第一个字节中连续1的个数表示该字符对应字节的长度

     
    转换过程
     

    “中”的unicode通过查unicode编码表可知为:4E2D,
    通过转换为二进制:100 1110 0010 1101。
    4E2D落在了0800~ FFFF区间内,再依据前面转换规则填充x。
    100 111000 101101
     

     

    11100100 10111000 10101101
    然后按补码
    11100100 = -128+64+32+4 = -28
    10111000 = -128+32+16+8 = -72
    10101101 = -128+32+8+4+1 = -83

    复习一下补码(按8位)
    28的二进制是00011100
    那么反码就是11100011
    补码就是11100100













    种一棵树最好的时间是十年前,其次是现在。
  • 相关阅读:
    基于51单片机的独立按键和矩阵按键用法
    基于51单片机,蜂鸣器和led每秒1滴1亮的程序
    基于51单片机,3秒1亮的程序
    n个灯,隔m个依次点亮的具体情况方法
    单片机的定时器
    有关芯片的认识
    MATLAB变量
    二组玩法介绍
    tkinter的GUI界面
    magento 物流问题
  • 原文地址:https://www.cnblogs.com/islch/p/12724282.html
Copyright © 2011-2022 走看看