EXT_Base64浅析

 1 package com.myutils.test;
 2 import org.junit.Test;
 3 import sun.misc.BASE64Encoder;
 4 import java.io.UnsupportedEncodingException;
 5 import java.util.Arrays;
 6 import java.util.HashMap;
 7 public class Base64Release {
 8     /**
 9      * base64编码测试
10      *    base64分析:
11      *      1.base64类似于askii(128位) 是一种编码表,有64个可打印字符组成
12      *      2.需要用2进制数来表示64个字符,即由二进制组成的数字来表示64个可打印字符,2的6次方可以完全表示64个字符,因此每个字符由6bit表示
13      *      3.askii中每个字符由1byte表示 三个字符由3byte(24bit)表示 因此3byte可表示4个可打印字符
14      *      4.类似的utf-8中一个汉字由三个字节组成,可以由4个base64码表示
15      *
16      *    "123" 用base64编码可用4个可打印字符表
17      */
18     @Test
19     public void base64() {
20         try {
21             BASE64Encoder base64Encoder = new BASE64Encoder();
22 //          String encode = base64Encoder.encode("123".getBytes());//MTIz
23 //          String encode = base64Encoder.encode("234".getBytes());//MjM0
24             String encode = base64Encoder.encode("程".getBytes()); //5Zu9
25        System.out.println(encode);
26     /*
27         十进制              1          2         3
28         askii中            49         50        51
29         二进制           00110001  00110010  00110011
30         按每六个一组     001100  010011 001000 110011
31         算出十进制         12      19     8      51
32         对应base64中       M      T      I       z
33 
34         十进制                         2         3        4
35         askii中                       50        51       52
36         二进制                     00110010  00110011  00110100
37         按每六个一组               001100  100011 001100 110100
38         算出十进制                   12       35     12     52
39         对应base64中                 M        j      M      0
40 
41       [汉字测试环境编码:UTF-8]
42         测试汉字       :              国                    |              程
43         测试结果       :    5         Z       u       9     |     5        6         i       L
44         对应base64     :   57        25      46      61     |    57       58        34      11
45         转换成二进制    : 111001    011001  101110  111101   |  111001   111010   100010   001011
46         每八位组合      :   11100101  10011011  10111101     |     ......
47         对应值[0-255]   :     229       155       189        |      ......
48         对应值[-128-127]:     -27       -101      -67        |       .......
49 
50         转换   :System.out.println(-128 + (229 - 128));                // -27               参考补码:128对应-128 255对应-1
51          System.out.println(-128 + (155 - 128)); //-101 
51          System.out.println(-128 + (189 - 128)); //-67
51 测试 :System.out.println(Arrays.toString("国".getBytes("UTF-8"))); //[-27, -101, -67] 52 */ 53 55 //打印对应utf-8码值 56 System.out.println(Arrays.toString("国".getBytes("UTF-8"))); //[-27, -101, -67] 57 //补码 58 System.out.println(-128 + (229 - 128)); //-27 
58        System.out.println(-128 + (155 - 128)); //-101        
58        System.out.println(-128 + (189 - 128)); //-67 59 60 61 } catch (UnsupportedEncodingException e) { 62 e.printStackTrace(); 63 } 64 } 65 }

Base64:

 

转载于:https://www.cnblogs.com/lyworkman/p/9163964.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值