hex 编码 java_浅谈Hex编码算法 - quickhelper的个人空间 - OSCHINA - 中文开源技术交流社区...

本文详细介绍了Java中Hex编码的概念、作用和应用场景,并提供了将字节数组转换为Hex字符串以及将Hex字符串还原为原始字节数组的代码实现。Hex编码主要用于将不可见的字节数组数据转化为可读的字符串形式,常用于XML和JSON等文本数据中包含二进制数据的场景。

一、什么是Hex

将每一个字节表示的十六进制表示的内容,用字符串来显示。

二、作用

将不可见的,复杂的字节数组数据,转换为可显示的字符串数据

类似于Base64编码算法

区别:Base64将三个字节转换为四个字符,Hex将三个字节转换为六个字节

三、应用场景

在XML,JSON等文本中包含不可见数据(二进制数据)时使用

四、使用

1、将字节数组转换为字符串

42e75a77df748ed7b08d88a21c8374d4.gif

1 /**

2 * 将字节数组转换为字符串

3 * 一个字节会形成两个字符,最终长度是原始数据的2倍

4 * @param data

5 * @return

6 */

7 public static String toHex(byte[] data){

8 String ret = null;

9

10 //TODO 将字节数组转换为字符串

11 if (data != null && data.length>0) {

12 StringBuilder sb = new StringBuilder();

13 for (byte b: data){

14 //分别获取高四位,低四位的内容,将两个数值,转为字符

15 int h = (b>>4)&0x0f;

16 int l = b&0x0f;

17 char ch ,cl;

18 if( h > 9 ){

19 ch = (char) ('A'+(h-10));

20 }else{ //0--9

21 ch = (char) ('0'+h);

22 }

23

24 if(l>9){

25 cl = (char) ('A'+(l-10));

26 }else{ //0--9

27 cl = (char) ('0'+l);

28 }

29

30

31 sb.append(ch).append(cl);

32 }

33 ret = sb.toString();

34 }

35

36 return ret;

37 }

42e75a77df748ed7b08d88a21c8374d4.gif

2、将字符串转换为字节数组

42e75a77df748ed7b08d88a21c8374d4.gif

1 public static byte[] fromHex(String str) {

2 byte[] ret = null;

3

4 //TODO 将Hex编码的字符串,还原为 原始的字节数组

5 if (str != null) {

6 int len = str.length();

7 if (len > 0 && len % 2 == 0) {

8 char[] chs = str.toCharArray();

9 ret = new byte[len / 2];

10 for (int i = 0, j = 0; i < len; i += 2, j++) {

11 char ch = chs[i];

12 char cl = chs[i + 1];

13

14 int ih = 0, il = 0, v = 0;

15 if (ch >= 'A' && ch <= 'F') {

16 ih = 10 + (ch - 'A');

17 } else if (ch >= 'a' && ch <= 'f') {

18 ih = 10 + (ch - 'a');

19 } else if (ch >= '0' && ch <= '9') {

20 ih = ch - '0';

21 }

22

23 if (cl >= 'A' && cl <= 'F') {

24 il = 10 + (cl - 'A');

25 } else if (cl >= 'a' && cl <= 'f') {

26 il = 10 + (cl - 'a');

27 } else if (cl >= '0' && cl <= '9') {

28 il = cl - '0';

29 }

30

31 v = ((ih & 0x0f) << 4) | (il & 0x0f);

32 //赋值

33 ret[j] = (byte) v;

34 }

35 }

36 }

37 return ret;

38 }

42e75a77df748ed7b08d88a21c8374d4.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值