我有一个像这样的字符串:
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)...
最佳答案
将十六进制转换为字节,然后将字节转换为十六进制。
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);
}
关于android - 将十六进制字符串转换为字节[],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18714616/