标签:组合 编码表 补码 -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:
标签:组合 编码表 补码 -128 完全 打印 array oid tst
原文地址:https://www.cnblogs.com/lyworkman/p/9163964.html