tangyuxian
文章79
标签37
分类5
数据结构-Hex和base64的编解码原理

数据结构-Hex和base64的编解码原理

简要总结Hex和base64的编解码原理

一. Hex编解码原理

二进制、十进制、十六进制的表示方式。

十进制与十六进制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 十进制
1 2 3 4 5 6 7 8 9 A B C D E F 十六进制
二进制,十进制,十六进制
11111111 二进制
255 十进制
FF 十六进制

Hex编码:就是把1个二进制数转换为2个十六进制数。

1个二进制数:[11111001] ,转换为2个十六进制数:[F9]。

249 十进制
11111001 二进制
1111 1001 4bit一组
15 9 十进制
F 9 十六进制

Hex解码:就是把2个十六进制数转换为1个二进制数。

2个十六进制数:[F9],转换为1个二进制数[11111001]。

F9 十六进制
F 9 十六进制
1111 1001 4bit一组
11111001 二进制

JAVA把二进制转换为16进制

import io.netty.buffer.ByteBufUtil;

public class HexTest {

  public static void main(String[] args) {

   byte[] data = new byte[]{(byte) 249, (byte) 249};

   System.out.println(ByteBufUtil.hexDump(data));

   //输出结果:f9f9

  }

}

JAVA把十六进制转为二进制

import io.netty.buffer.ByteBufUtil;

public class HexTest {

  public static void main(String[] args) {

    byte[] data = ByteBufUtil.decodeHexDump("f9f9");

    System.out.println((data[0] & 0xff) + "|" + (data[1] & 0xff));

   //249|249

  }

}

二. Base64 编解码原理

Base64编解码是通过一个码表,将字符串与二进制数据进行相互转换的过程。

image-20210512145733396

字符串原文:

Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.

 

转换为base64字符串:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

编码Man

Base编码将原来的3个字节编码为4个字符,把24个比特按6个一组转换为字符。

image-20210512145654633

附:ASCII码表

如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先在末尾补充字节,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。也就是说,当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 参考下表:

image-20210512145615005

本文作者:温故而知新666
文章来源:https://liuhuaqiang.blog.csdn.net/
本文链接:https://www.tangyuxian.com/2021/05/12/%E5%90%8E%E7%AB%AF/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-Hex%E5%92%8Cbase64%E7%9A%84%E7%BC%96%E8%A7%A3%E7%A0%81%E5%8E%9F%E7%90%86/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可