一、什么是Hex

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

二、作用

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

类似于Base64编码算法

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

三、应用场景

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

四、使用

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

 /**
* 将字节数组转换为字符串
* 一个字节会形成两个字符,最终长度是原始数据的2倍
* @param data
* @return
*/
public static String toHex(byte[] data){
String ret = null; //TODO 将字节数组转换为字符串
if (data != null && data.length>) {
StringBuilder sb = new StringBuilder();
for (byte b: data){
//分别获取高四位,低四位的内容,将两个数值,转为字符
int h = (b>>)&0x0f;
int l = b&0x0f;
char ch ,cl;
if( h > ){
ch = (char) ('A'+(h-));
}else{ //0--9
ch = (char) (''+h);
} if(l>){
cl = (char) ('A'+(l-));
}else{ //0--9
cl = (char) (''+l);
} sb.append(ch).append(cl);
}
ret = sb.toString();
} return ret;
}

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

  public static byte[] fromHex(String str) {
byte[] ret = null; //TODO 将Hex编码的字符串,还原为 原始的字节数组
if (str != null) {
int len = str.length();
if (len > && len % == ) {
char[] chs = str.toCharArray();
ret = new byte[len / ];
for (int i = , j = ; i < len; i += , j++) {
char ch = chs[i];
char cl = chs[i + ]; int ih = , il = , v = ;
if (ch >= 'A' && ch <= 'F') {
ih = + (ch - 'A');
} else if (ch >= 'a' && ch <= 'f') {
ih = + (ch - 'a');
} else if (ch >= '' && ch <= '') {
ih = ch - '';
} if (cl >= 'A' && cl <= 'F') {
il = + (cl - 'A');
} else if (cl >= 'a' && cl <= 'f') {
il = + (cl - 'a');
} else if (cl >= '' && cl <= '') {
il = cl - '';
} v = ((ih & 0x0f) << ) | (il & 0x0f);
//赋值
ret[j] = (byte) v;
}
}
}
return ret;
}

相关知识:

浅谈Base64编码算法

浅谈URLEncoder编码算法

浅谈Hex编码算法的更多相关文章

  1. 浅谈URLEncoder编码算法

    一.为什么要用URLEncoder 客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文. 而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址, 将 ...

  2. 浅谈Base64编码算法

    一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的 ...

  3. 浅谈Base64编码

    浅谈Base64编码 我打赌当你见到Base64这个词的时候你会觉得在哪里见过,因为在你能够上网看到这篇文章的时候你已经在后台使用它了.如果您对二进制数有所了解,你就可以开始读它了. 打开一封Emai ...

  4. 浅谈Android编码规范及命名规范

    前言: 目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑. 现大框架已经完成,正在进行细节模块上的开发 抽空总结一下Android项目的开发规范:1.编码规范 ...

  5. 浅谈分布式共识算法raft

    前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行.高效流转.主节点挂了怎么办.如何选主.各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题 ...

  6. (转载) 浅谈python编码处理

    最近业务中需要用 Python 写一些脚本.尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息. 很快,我就遇到了异常: UnicodeEncodeError: ...

  7. 浅谈数据结构-Boyer-Moore算法

    上文讲解了KMP算法,这种算法在字符串匹配中应用比较少,在各种文本编辑器中的查找功能大多采用Boyer-Moore算法.1977年,德克萨斯大学的Robert S. Boyer教授和J Strothe ...

  8. 浅谈关于特征选择算法与Relief的实现

    一. 背景 1) 问题 在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果: 1.     特征个数越多,分析特征.训练模型所需的时间就越 ...

  9. 浅谈Unicode编码

    目录 1.概述 2.ASCII编码 3.历史问题 4.Unicode 4-1.Unicode 编码方案 4-2.关于bom 5.UTF-8 6.UTF-16 1.概述 对于ASCII编码,相信同学们都 ...

随机推荐

  1. 【原】Oracle11gR2图文安装

    作者:david_zhang@sh [转载时请以超链接形式标明文章] http://www.cnblogs.com/david-zhang-index/p/4365475.html 本文以看图说话的方 ...

  2. ruby AES加密解密

    最近和京东合作做一个项目,在接口对接传递参数时,参数需要通过AES加密解密. 本来想到用gem 'aescrypt'处理,但是aescrypt的编码方式用的base64,而京东那边用的是16进制.所以 ...

  3. MSSQL 之事务订单存储过程

    1. 赋值   set  或者 select 运算符 2.全局,局部变量区别,生命域 (全局变量用户不能定义) 3.@@identity  返回最后插入行的标识列的列值. 4.delete 只删除了数 ...

  4. 关于win7和xp的屏设置类

    DisplayInfo.h #pragma once enum WinVerDef { WIN_VER_UNKNOWN = -, WIN_VER_95 = , WIN_VER_98, WIN_VER_ ...

  5. Surface Shader

    Surface Shader: (1)必须放在SubShdader块,不能放在Pass内部: (2)#pragma sufrace surfaceFunction lightModel [option ...

  6. 程序设置横屏后,锁屏时会被销毁一遍,解锁时又重新加载onCreat的问题解决

    今天在写一个应用的时候,因为需要设置成横屏模式,所以在Manifest里面的Activity里面加了两个参数设置: android:screenOrientation="landscape& ...

  7. Tracert 转

    路由跟踪在线Tracert Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确 ...

  8. Android上的事件流操作数据库

    最近在浏览某篇有关事件流的文章时,里面提到了数据的流处理,兴趣来了,就想看看能否在Android端实现一个. 根据文章的介绍,将每次数据的变更事件,像是插入,删除或者更新等,记为一个不可变的事件,让数 ...

  9. Qt之QAbstractItemView右键菜单

    一.功能概述 说起右键菜单,之前Qt之自定义QLineEdit右键菜单这篇文章中我已经讲述过3种右键菜单的实现方式,今儿也是在啰嗦一下,针对QListWidget类在定制一下右键菜单,我使用的具体方式 ...

  10. Qt Style Sheet实践(三):QCheckBox和QRadioButton

    导读 单选按钮(QRadioButton)和复选框(QCheckBox)是界面设计中的重要元素.单选按钮只允许用户在一组选项中选择一个,且当其中一个被选中的时候,按钮组中的其他单选按钮自动取消.复选框 ...