码迷,mamicode.com
首页 > 其他好文 > 详细

EXT_Base64浅析

时间:2018-06-10 18:59:43      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:组合   编码表   补码   -128   完全   打印   array   oid   tst   

 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 
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         转换eg :System.out.println(-128 + (229 - 128));        //-27  参考补码:128对应-128 255对应-1
51         测试   :System.out.println(Arrays.toString("国".getBytes("UTF-8"))); //[-27, -101, -67]
52     */
53             System.out.println(encode);
54 
55             //打印对应utf-8码值
56             System.out.println(Arrays.toString("国".getBytes("UTF-8"))); //[-27, -101, -67]
57             //补码
58             System.out.println(-128 + (229 - 128)); //-27
59 
60 
61         } catch (UnsupportedEncodingException e) {
62             e.printStackTrace();
63         }
64     }
65 }

Base64:

技术分享图片

 

EXT_Base64浅析

标签:组合   编码表   补码   -128   完全   打印   array   oid   tst   

原文地址:https://www.cnblogs.com/lyworkman/p/9163964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!