在实际中会遇到这样的需求,即将一个字符串转换成二进制数组,但二进制数组的传输却并不方便,例如通过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中将字节数组转换为十六进制字符串的方法多种多样,可以根据项目需求和性能要求选择合适的方式。在开发过程中,了解并熟练掌握这些转换技巧,可以帮助我们更好地处理二进制数据,提升代码的可读性和可...
C#字节数组转16进制字符串 C#字节数组转16进制字符串 QQ:292258449
二、字节数组与十六进制字符串转换 1. **字节数组转十六进制字符串**:可以使用自定义方法或者`HexUtils`类(参考你的文件名)。例如: ```java byte[] bytes = {1, 2, 3}; String hexString = toHexString(bytes);...
- 示例中的`hexStringToByte()`方法将十六进制字符串转换为字节数组,而`bytesToHexString()`则将字节数组转换为十六进制字符串。 2. **字节数组** - 字节数组在Java中用`byte[]`表示,它可以存储任意字节值,常...
反之,从十六进制字符串转换回字节数组的过程也相对简单: ```csharp public static byte[] HexStringToByteArray(string hex) { int length = hex.Length / 2; byte[] bytes = new byte[length]; for (int i = 0...
由C代码翻译过来的PHP CRC8算法,内有十六进制转字节数组与字节数组转十六进制,内有十六进制转byte数组与byte数组转十六进制
一、从十六进制字符串转换为二进制数据 在 Lua 中,可以使用 string.len 函数来获取十六进制字符串的长度,然后使用 for 循环来遍历整个字符串,使用 string.sub 函数来截取每两个字符,使用 tonumber 函数将其转换...
这个示例展示了如何使用`sprintf`将一个字节转换为十六进制字符串,以及如何使用`strtol`将一个十六进制字符串转换回字节。 在实际应用中,你可能会遇到更复杂的情况,比如处理包含多个字节的数组或者字符串,这时...
在描述中提到的博文链接虽然无法直接访问,但根据标题,我们可以推测博主可能分享了一种将十六进制字符串转换为字节数组的方法。通常,这种转换过程包括以下步骤: 1. **预处理**:检查输入的十六进制字符串是否...
4. **十六进制表示**:在LabVIEW中,有时需要将字节数组表示为十六进制字符串,这对于数据的显示和记录很有用。可以使用“字节数组到十六进制字符串”函数,将每个字节转换为其对应的十六进制表示。 5. **自定义VI*...
要将十六进制字符串转换为普通字符串,主要步骤包括: 1. 分割十六进制字符串:由于每个ASCII字符由两个十六进制数字组成,我们需要将输入的十六进制字符串按每两个字符进行分割,形成一个十六进制数字的数组。 2....
首先,我们要了解如何将十六进制字符串转换为整数值。在C++中,可以使用`std::stringstream`和`std::hex`函数来完成这个任务。`std::stringstream`是一个字符流,允许我们像处理输入输出流一样处理字符串;`std::hex...
然后,我们遍历字节数组,使用`ToString("x2")`将每个字节转换为两位的十六进制字符串,并添加到`StringBuilder`对象中。 二、十六进制串反向转回原字符串 从十六进制串还原字符串,我们需要做相反的操作:首先将...
本工具专注于将16进制字符串转换为10进制的byte数组,这在处理如数据库存储、加密解密、网络通信等场景中非常常见。 1. **16进制字符串与10进制byte数组的概念** - **16进制字符串**:由0-9和A-F(或a-f)字符组成...
首先,它将输入的十六进制字符串转换为字节数组,然后使用这些字节尝试以UTF-8、UTF-16(与Unicode相同)、UTF-16LE(小端字节序)、UTF-16BE(大端字节序)、UTF-32以及各自的LE和BE版本进行解码。`str2all`方法则...
byte数组、十进制、十六进制间的两两转换
labview 读取的一维数组(整数)转换成16进制的字符串,方便大家进行数据处理。有问题可以留言咨询,互相学习
/* java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */
此函数用于将一个十六进制字符串转换为字节数组。该函数首先会移除输入字符串中的所有非十六进制字符,然后检查字符串长度是否为偶数,如果不是,则在末尾添加一个空字符以保证转换正确进行。接着,通过循环遍历字符...