Java byte和hex十六进制字符串转换
在Java中字符串由字符char组成, 一个char由两个byte组成, 而一个byte由八个bit组成, 一个十六进制字符(0-F)实际上由4个字节byte即可表达, 因此, 从字节数组到十六进制字符串, 实际上占用的存储空间扩大了4倍。
下面来看一下从十六进制字符串转换为字节数组的方式:
第一种方法: 实际借用了Character类的方法进行16进制的转换
static byte[] hexToByteArray2(String hex)
{
int l = hex.length();
byte[] data = new byte[l / 2];
for (int i = 0; i < l; i += 2)
{
data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
+ Character.digit(hex.charAt(i + 1), 16));
}
return data;
}
第二种方法: 借用了Integer类中的十六进制转换:
static byte[] hexToByteArray(String hexString) {
byte[] result = new byte[hexString.length() / 2];
for (int len = hexString.length(), index = 0; index <= len - 1; index += 2) {
String subString = hexString.substring(index, index + 2);
int intValue = Integer.parseInt(subString, 16);
result[index / 2] = (byte)intValue;
}
return result;
}
从字节数组转换为十六进制的方法:
一、
static String byteArrayToHex(byte[] bytes) {
StringBuilder result = new StringBuilder();
for (int index = 0, len = bytes.length; index <= len - 1; index += 1) {
int char1 = ((bytes[index] >> 4) & 0xF);
char chara1 = Character.forDigit(char1, 16);
int char2 = ((bytes[index]) & 0xF);
char chara2 = Character.forDigit(char2, 16);
result.append(chara1);
result.append(chara2);
}
return result.toString();
}
二、
static String byteArrayToHex2(byte[] bytes) {
StringBuilder result = new StringBuilder();
for (int index = 0, len = bytes.length; index <= len - 1; index += 1) {
String invalue1 = Integer.toHexString((bytes[index] >> 4) & 0xF);
String intValue2 = Integer.toHexString(bytes[index] & 0xF);
result.append(invalue1);
result.append(intValue2);
}
return result.toString();
}
然后介绍一种更实用的字符串和十六进制之间的转换:
十六进制转字符串:
static String hexToString(String hex, Charset charset) {
return new String(new BigInteger(hex, 16).toByteArray(), charset);
}
字符串转十六进制:
static String stringToHex(String arg, Charset charset) {
if (arg == null || arg.length() == 0) {
return "";
}
byte[] bytes = arg.getBytes(charset);
return String.format("%0" + bytes.length * 2 + "x", new BigInteger(1, bytes));
}
Java byte和hex十六进制字符串转换的更多相关文章
- Java中将0x开头的十六进制字符串转换成十进制整数
1.Integer.toString(int i) 由于input(输入数据)是以0x开头的字符串,并不是整型.因而在用 String s = Integer.toString(input); 时用会 ...
- java byte to hex
String str; byte[] bs = null; bs =str.getBytes(); bs =str.getBytes("utf-8") java byte to ...
- Java - 将vCard中十六进制编码转换成Unicode
做课程设计的时候在处理vCard格式的时候遇到过出现十六进制编码的情况,例如 QUOTED-PRINTABLE:=XX=XX=XX=XX=XX`````` 其中XX代表十六进制数,当然,也有可能在末尾 ...
- Java中将16进制字符串转换成汉字
技术交流群:233513714 /** * 将16进制字符串转换成汉字 * @param str * @return */ public static String deUnicode(String ...
- IOS 十六进制字符串转换成UIColor
/** * 十六进制转换成UIColor * * @param stringToConvert 十六进制字符串 * * @return UIColor */ +(UIColor *) hexStrin ...
- byte[]数组与十六进制字符串与字符串的互相转换 ——转载
https://www.cnblogs.com/lelehellow/p/6369631.html
- JAVA byte有无符号数的转换
如果你只需要对英文文本的每个字节进行数据处理,则无需考虑有符号数和无符号数的转换问题: 但如果你需要对含有中文的文本进行字节处理,则可能需要考虑有无符号数的转换问题. 以下代码均为Java代码. 1. ...
- C++中char类型的十六进制字符串转换成字节流
如a[5]="1234"转换成a[5]={0x12,0x34} 代码如下: void HexStrToByte(const char* source, unsigned char* ...
- Java中如何把一下字符串转换成map
首先,你先确认你的字符串是否是json格式的,如果是json格式,那你可以使用Gson.jar或json-lib-xx-jdk.jar两个包来自动解析解析. 使用Gson更简单些,只需要导入一个包就可 ...
随机推荐
- mui.fire()用法,触发目标窗口的自定义事件
mui.fire( 目标窗口的webview , '自定义事件名' ,{参数列表}:) 目标窗口监听这个自定义事件 window.addEventListener('自定义事件名',function( ...
- (7)树莓派读物USB摄像头
https://blog.csdn.net/qq_42403190/article/details/90453305 创建文件 camera.py 简单读取 #!/usr/bin/env python ...
- .net core 从 ActionFilterAttribute 获取Request.Body 的正确方式
由于 ModelBinding在动作过滤器之前运行,直接使用 context.ActionArguments["parameter"] 获取模型对象 This article s ...
- 第04组Alpha事后诸葛亮
一.组长博客:地址 二.Postmortem模板 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们要解决的问题是让大学生可以通过福鱼网站将暂时无 ...
- YAML语法基础(K8s基础)
对于YAML语言,网上有很多将YAML转换为JSON格式的在线转换器,以下内容都可直接验证,另外若有兴趣更深入学习YAML,可到其官方站点去学习,下面介绍的仅仅是比较常用的内容,并非YAML语法的全部 ...
- 获取shell脚本自身所在目录
解决了使用ln -s target linkName创造软链接无法正确取到真实脚本的问题. #!/bin/bash SOURCE="$0" while [ -h "$SO ...
- oracle--CKPT
一,CKPT功能 ) 调度数据写: ) 会将已经完成的检查点写到数据文件头: ) 把已经完成的检查点写到控制文件: . other:其他进程: . 注意:磁盘.内存支持并行I/O,磁带不支持: . 服 ...
- 原生js实现元素类名的判存、添加和移除
1.addClass:为指定的dom元素添加样式. 2.removeClass:删除指定dom元素的样式. 3.toggleClass:如果存在(不存在),就删除(添加)一个样式. 4.hasClas ...
- poi导入读取时间格式问题
万能处理方案: 所有日期格式都可以通过getDataFormat()值来判断 yyyy-MM-dd-----14 yyyy年m月d日--- 31 yyyy年m月-------57 m月d日 ---- ...
- Leetcode:2. 两数相加
题目描述: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来 ...