浅谈Hex编码算法
一、什么是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;
}
相关知识:
浅谈Hex编码算法的更多相关文章
- 浅谈URLEncoder编码算法
一.为什么要用URLEncoder 客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文. 而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址, 将 ...
- 浅谈Base64编码算法
一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的 ...
- 浅谈Base64编码
浅谈Base64编码 我打赌当你见到Base64这个词的时候你会觉得在哪里见过,因为在你能够上网看到这篇文章的时候你已经在后台使用它了.如果您对二进制数有所了解,你就可以开始读它了. 打开一封Emai ...
- 浅谈Android编码规范及命名规范
前言: 目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑. 现大框架已经完成,正在进行细节模块上的开发 抽空总结一下Android项目的开发规范:1.编码规范 ...
- 浅谈分布式共识算法raft
前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行.高效流转.主节点挂了怎么办.如何选主.各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题 ...
- (转载) 浅谈python编码处理
最近业务中需要用 Python 写一些脚本.尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息. 很快,我就遇到了异常: UnicodeEncodeError: ...
- 浅谈数据结构-Boyer-Moore算法
上文讲解了KMP算法,这种算法在字符串匹配中应用比较少,在各种文本编辑器中的查找功能大多采用Boyer-Moore算法.1977年,德克萨斯大学的Robert S. Boyer教授和J Strothe ...
- 浅谈关于特征选择算法与Relief的实现
一. 背景 1) 问题 在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果: 1. 特征个数越多,分析特征.训练模型所需的时间就越 ...
- 浅谈Unicode编码
目录 1.概述 2.ASCII编码 3.历史问题 4.Unicode 4-1.Unicode 编码方案 4-2.关于bom 5.UTF-8 6.UTF-16 1.概述 对于ASCII编码,相信同学们都 ...
随机推荐
- 如何克隆kvm虚拟机
关于如何使用kvm虚拟化技术创建虚拟机,这里有一系列博客讲的已经非常清楚了,这里不再赘述,不过其中有些小坑可能需要大家注意: 0. 写在创建虚拟机之前(即教程的系列三之前) 1. 确认防火墙是否关闭, ...
- Android抽象布局——include、merge 、ViewStub
http://blog.csdn.net/xyz_lmn/article/details/14524567
- LOD设置
Level of detail: 使用多个不同复杂度的mesh来表示一个object,当物体离摄像机越远时,就是用更加low-detail的mesh,反之越近就越使用越精细的mesh. 组件:LOD ...
- [Tango] Basic Knowledge
Project Tango类设备能够给开发者在哪些领域带来机会. 室内导航*:室内GPS信号的缺失,使得Project Tango设备会成为室内导航重要应用场景之一.有了它,你就不会在不熟悉的室内商场 ...
- Hya.io – 基于 Web 的数字音频工作站
Hya.io 是基于 Web 的音频应用程序,通过 Web MIDI ,音频合成器,音序以及大量的插件来支持硬件 MIDI .您可以添加插件到工作区,将其连接到路由音频,进行播放和实验. HYA 支持 ...
- 创意欣赏:20幅字体排版(Typography)素描
通常我们都只关注最终的作品,但其实幕后还有很多的过程,其中一个是素描.素描用来表达最初思想观念的原型.有时客户需要一个独特的品牌新LOGO或字体,这时先绘制在纸上是比较方便的,之后扫描到 Photos ...
- IOS开发UI基础UISegment属性
UISegment属性 1.segmentedControlStyle设置segment的显示样式.typedef NS_ENUM(NSInteger, UISegmentedControlStyle ...
- SpringMVC核心——返回值问题
一.SpringMVC 使用 ModelAndView 来处理返回值问题. 1.ModelAndView 官方描述: Holder for both Model and View in the web ...
- eclipse中去掉Js/javsscript报错信息
1.首先在problem>errors中删除所有js错误: 如下图 2.然后再勾选掉javascript Validator: 3.clean下项目吧,你会发现再也不出现js红叉叉了,哈哈.
- MVC,如何在视图中声明方法,调用方法?
<div> <!--在视图中申明方法,此方法的类型已经固定为HelperResult--> @helper ShowHello(string s) { <div> ...