博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈Hex编码算法
阅读量:6655 次
发布时间:2019-06-25

本文共 2612 字,大约阅读时间需要 8 分钟。

一、什么是Hex

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

 

二、作用

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

类似于Base64编码算法

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

 

三、应用场景

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

 

四、使用

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

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--921                     ch = (char) ('0'+h);22                 }23 24                 if(l>9){25                     cl = (char) ('A'+(l-10));26                 }else{  //0--927                     cl = (char) ('0'+l);28                 }29 30 31                     sb.append(ch).append(cl);32                 }33                   ret = sb.toString();34             }35 36         return ret;37     }

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

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     }

 

相关知识:

转载地址:http://rmxto.baihongyu.com/

你可能感兴趣的文章
《统一沟通-微软-实战》-6-部署-7-部署移动功能-2
查看>>
go语言笔记——调试还很弱,用gdb来做?可用panic和defer。格式化代码使用gofmt,貌似我的vim插件是自带...
查看>>
Linux 安装.src.rpm源码包的方法
查看>>
c#将对象序列化为字符串和将字符串反序列化为对象
查看>>
Android Loader详解四:回调及完整例子
查看>>
Oracle笔记 三、function 、select
查看>>
PHP5.5面向对象连接mysqli
查看>>
一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件...
查看>>
Linux命令大全
查看>>
git 拉取和获取 pull 和 fetch 区别
查看>>
html5系列目录
查看>>
C# 视频监控系列(1):准备
查看>>
6.3. 获取当前用户
查看>>
软件架构中的层次依赖
查看>>
两个容易被忽略的mysql知识
查看>>
ORACLE SOA SUITE ORABPEL-12133 错误解决
查看>>
除了新闻识别,这家媒体还利用AI管理内容分发,2500万人已关注
查看>>
【Python】执行系统命令的常见用法
查看>>
Yarn 安装
查看>>
敏捷开发中如何定义“完成”?
查看>>