在实际中会遇到这样的需求,即将一个字符串转换成二进制数组,但二进制数组的传输却并不方便,例如通过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进制与字符串、字节数组之间的转换
labview 读取的一维数组(整数)转换成16进制的字符串,方便大家进行数据处理。有问题可以留言咨询,互相学习
labview,ASCII码字符串与字节数组的互转,十六进制,例如:字符串BA34转字节数组结果为BA,34
byte数组、十进制、十六进制间的两两转换
NULL 博文链接:https://hw1287789687.iteye.com/blog/1882644
/* java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */
16进制数值向2进制字符串转化的小程序,亲测有效,内部附有解释说明
自动将十六进制字符串转换为浮点数数组,可解决广大labview初学者开始学习时遇到的困难,可直接作为调用,并且转化成浮点数数组提高了自动转化效率,
NULL 博文链接:https://duanfei.iteye.com/blog/1883475
字符串之间的转化通用,字节数组转化为十六进制字符串,16进制转化为byte数组,十六进制字符串转字符串,将一条十六进制字符串转换为ASCII
代码如下:/// <summary> /// 字符串转16进制字节数组 /// </summary> /// ”hexString”></param> /// <returns></returns> private static byte[] strToToHexByte(string hexString) { hexString = hexString....
该代码可以实现单精度浮点数和16进制字符之间的转换,包含源代码
15.将十六进制字符串转换为字节数组 16.将十六进制字符转换成一个整数 17.截取字节数组 18.int转byte数组 19.byte数组转int 20.字节数组逆序 21.异或校验/BCC异或校验 22.将16进制字符串低位字节补零 23.将十进制...
二进制数组转换为二进制字符串 将二进制数组转换为十六进制字符串 将十六进制转换为二进制字节数组 将十六进制转换为二进制字符串
输入string 输出byte 16进制下的转换
Arduino-十六进制-十进制转换用于在 Arduino 上在十六进制字符串和十进制数之间转换值的实用函数。 (有助于颜色转换)。 在 MIT 许可下许可用于任何用途。