package wjb.baidu.ai.utils;

/**
 * Base64 工具类
 */
public class Base64Util {
	private static final char last2byte = (char) Integer.parseInt("00000011", 2);
	private static final char last4byte = (char) Integer.parseInt("00001111", 2);
	private static final char last6byte = (char) Integer.parseInt("00111111", 2);
	private static final char lead6byte = (char) Integer.parseInt("11111100", 2);
	private static final char lead4byte = (char) Integer.parseInt("11110000", 2);
	private static final char lead2byte = (char) Integer.parseInt("11000000", 2);
	private static final char[] encodeTable = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' };

	public Base64Util() {
	}

	public static String encode(byte[] from) {
		StringBuilder to = new StringBuilder((int) ((double) from.length * 1.34D) + 3);
		int num = 0;
		char currentByte = 0;

		int i;
		for (i = 0; i < from.length; ++i) {
			for (num %= 8; num < 8; num += 6) {
				switch (num) {
				case 0:
					currentByte = (char) (from[i] & lead6byte);
					currentByte = (char) (currentByte >>> 2);
				case 1:
				case 3:
				case 5:
				default:
					break;
				case 2:
					currentByte = (char) (from[i] & last6byte);
					break;
				case 4:
					currentByte = (char) (from[i] & last4byte);
					currentByte = (char) (currentByte << 2);
					if (i + 1 < from.length) {
						currentByte = (char) (currentByte | (from[i + 1] & lead2byte) >>> 6);
					}
					break;
				case 6:
					currentByte = (char) (from[i] & last2byte);
					currentByte = (char) (currentByte << 4);
					if (i + 1 < from.length) {
						currentByte = (char) (currentByte | (from[i + 1] & lead4byte) >>> 4);
					}
				}

				to.append(encodeTable[currentByte]);
			}
		}

		if (to.length() % 4 != 0) {
			for (i = 4 - to.length() % 4; i > 0; --i) {
				to.append("=");
			}
		}

		return to.toString();
	}
}
最近下载更多
coolcool123  LV1 3月17日
lironggang  LV38 2023年4月27日
97622282  LV1 2022年6月7日
王伟杰  LV2 2021年11月12日
淮竹  LV1 2021年10月13日
我是桃子呀  LV3 2021年7月14日
jokerYao  LV1 2020年11月27日
cas  LV9 2020年9月21日
sakura_fc  LV1 2020年9月10日
wanhaiq  LV3 2020年7月2日
最近浏览更多
coolcool123  LV1 3月17日
liyonggang  LV2 1月19日
miaoshi  LV16 1月3日
837055744 2023年7月20日
暂无贡献等级
2017143155  LV12 2023年6月27日
lironggang  LV38 2023年4月27日
nsq0006  LV6 2023年3月3日
lc4519  LV3 2023年3月3日
uni-code_0123  LV1 2023年1月10日
arkic1 2022年12月1日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友