将十六进制字符串转换为字节 []
Posted
技术标签:
【中文标题】将十六进制字符串转换为字节 []【英文标题】:Convert hex string to byte [] 【发布时间】:2013-09-13 21:49:09 【问题描述】:我有一个这样的字符串:
init_thread = "2b11020000ed"
我必须通过蓝牙发送这个字符串,我这样做:
byte[] init = init_thread.getBytes();
GlobalVar.mTransmission.write(init);
我需要在将init_thread
字符串转换为字节之前定义它是一个十六进制字符串,因为如果我这样做,就会出错:
现在在做什么 = 2(1byte), b(1byte), 1(1byte), 1(1byte)...
必须做什么 = 2b(1byte), 11(1byte), 02(1byte)...
【问题讨论】:
看看[this][1],可能有用[1]:***.com/questions/140131/… 【参考方案1】:将十六进制转换为字节,将字节转换为十六进制。
public static byte[] hexStringToByteArray(String s)
int len = s.length();
byte[] data = new byte[len/2];
for(int i = 0; i < len; i+=2)
data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
return data;
final protected static char[] hexArray = '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F';
public static String byteArrayToHexString(byte[] bytes)
char[] hexChars = new char[bytes.length*2];
int v;
for(int j=0; j < bytes.length; j++)
v = bytes[j] & 0xFF;
hexChars[j*2] = hexArray[v>>>4];
hexChars[j*2 + 1] = hexArray[v & 0x0F];
return new String(hexChars);
【讨论】:
我的字符串索引越界异常我的输入:e1a0b7f @HeartlessArchangel 您的字符串只有 7 个字符长,不代表 4 个字节,您需要 8 个字符【参考方案2】:如果我们想将十六进制转换为字节数组,我们应该确保十六进制字符串长度应该是偶数。下面的方法处理这个
public static byte[] hexToByteArray(String hex)
hex = hex.length()%2 != 0?"0"+hex:hex;
byte[] b = new byte[hex.length() / 2];
for (int i = 0; i < b.length; i++)
int index = i * 2;
int v = Integer.parseInt(hex.substring(index, index + 2), 16);
b[i] = (byte) v;
return b;
【讨论】:
以上是关于将十六进制字符串转换为字节 []的主要内容,如果未能解决你的问题,请参考以下文章