在实际中会遇到这样的需求,即将一个字符串转换成二进制数组,但二进制数组的传输却并不方便,例如通过HTTP协议传输,因此需要把二进制字节数组转换成十六进制字符串,接收方接收该字符串以后,再把它转换成二进制字节数组。这有一个好处,就是可以避免乱码,从来适用于各种场合,有很好的适应性。
我所遇到的情况是,出于安全的考虑,需要对信息进行加密,但加密后返回的是字节数组,无法将加密后的数据直接放在文本中使用,而实际又有这样的需求,因此也需要这样的转换。以下就是实现,希望能对有需要的朋友有些帮助
/**
* ByteHEXUtils.java created by Dirac on 2013-7-30
*/
package com.into4g.service.util;
/**
* @author Dirac
* @since 2013-7-30
*/
public class ByteHEXUtils {
static final byte[] HEX_TABLE = {0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF};
static final char[] HEX_CHAR_TABLE = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
public String toHexString(byte[] data) throws Exception{
if(data==null || data.length==0)return null;
byte[] hex = new byte[data.length*2];
int index = 0;
for(byte b: data){
int v = b & 0xFF;
hex[index++] = (byte)HEX_CHAR_TABLE[v>>>4];
hex[index++] = (byte)HEX_CHAR_TABLE[v&0xF];
}
return new String(hex);
}
public byte[] hexToByte(String hexString){
if(hexString==null || hexString.length()==0)return null;
if(hexString.length()%2!=0)throw new RuntimeException();
byte[] data = new byte[hexString.length()/2];
char[] chars = hexString.toCharArray();
for(int i=0;i<hexString.length();i=i+2){
data[i/2] = (byte)(HEX_TABLE[getHexCharValue(chars[i])]<<4 | HEX_TABLE[getHexCharValue(chars[i+1])]);
}
return data;
}
private int getHexCharValue(char c){
int index = 0;
for(char c1: HEX_CHAR_TABLE){
if(c==c1){
return index;
}
index++;
}
return 0;
}
}
测试代码:
/**
* ByteHEXUtilsTest.java created by Dirac on 2013-7-30
*/
package com.into4g.service.util;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
/**
* @author Dirac
* @since 2013-7-30
*/
public class ByteHEXUtilsTest {
private ByteHEXUtils utils;
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
utils = new ByteHEXUtils();
}
/**
* Test method for {@link com.into4g.service.util.ByteHEXUtils#toHexString(byte[])}.
* @throws Exception
*/
@Test
public final void testToHexString() throws Exception {
byte[] bytes = "岁月是把杀猪刀,人生任由他宰割。".getBytes("utf-8");
String data = utils.toHexString(bytes);
System.out.println(data);
assertTrue(true);
//fail("Not yet implemented"); // TODO
}
/**
* Test method for {@link com.into4g.service.util.ByteHEXUtils#hexToByte(java.lang.String)}.
*/
@Test
public final void testHexToByte() throws Exception{
byte[] data = utils.hexToByte("E5B281E69C88E698AFE68A8AE69D80E78CAAE58880EFBC8CE4BABAE7949FE4BBBBE794B1E4BB96E5AEB0E589B2E38082");
String str = new String(data, "utf-8");
System.out.println("str======="+str);
//fail("Not yet implemented"); // TODO
}
}
相关推荐
android byte字节数组转换十六进制字符串一个demo。里面有几种转换测试代码。我的博客地址:http://blog.csdn.net/qq_16064871。
C#字节数组转16进制字符串 C#字节数组转16进制字符串 QQ:292258449
最近由于工作上的需要,遇到进制转换的问题。涉及到的进制主要是 十进制,十六进制,二进制中间的转换。还包括了一个字节数组 与十六进制字符串的互相转换。估计遇到蓝牙通信的朋友,应该用的上。
16进制与字符串、字节数组之间的转换 16进制与字符串、字节数组之间的转换
byte数组、十进制、十六进制间的两两转换
labview 读取的一维数组(整数)转换成16进制的字符串,方便大家进行数据处理。有问题可以留言咨询,互相学习
labview,ASCII码字符串与字节数组的互转,十六进制,例如:字符串BA34转字节数组结果为BA,34
/* java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */
NULL 博文链接:https://hw1287789687.iteye.com/blog/1882644
16进制数值向2进制字符串转化的小程序,亲测有效,内部附有解释说明
自动将十六进制字符串转换为浮点数数组,可解决广大labview初学者开始学习时遇到的困难,可直接作为调用,并且转化成浮点数数组提高了自动转化效率,
该代码可以实现单精度浮点数和16进制字符之间的转换,包含源代码
NULL 博文链接:https://duanfei.iteye.com/blog/1883475
代码如下:/// <summary> /// 字符串转16进制字节数组 /// </summary> /// ”hexString”></param> /// <returns></returns> private static byte[] strToToHexByte(string hexString) { hexString = hexString....
15.将十六进制字符串转换为字节数组 16.将十六进制字符转换成一个整数 17.截取字节数组 18.int转byte数组 19.byte数组转int 20.字节数组逆序 21.异或校验/BCC异或校验 22.将16进制字符串低位字节补零 23.将十进制...
字符串之间的转化通用,字节数组转化为十六进制字符串,16进制转化为byte数组,十六进制字符串转字符串,将一条十六进制字符串转换为ASCII
二进制数组转换为二进制字符串 将二进制数组转换为十六进制字符串 将十六进制转换为二进制字节数组 将十六进制转换为二进制字符串
输入string 输出byte 16进制下的转换
Arduino-十六进制-十进制转换用于在 Arduino 上在十六进制字符串和十进制数之间转换值的实用函数。 (有助于颜色转换)。 在 MIT 许可下许可用于任何用途。