我正在使用Android应用程序与Bluetooth LE设备进行通信。 该库将byte []作为输入发送到BLE设备。 我遇到了从String到Hex,再到Hex To字节的转换问题。
我要发送的数据是 23,57,12,15,D9 (这是一个字节数组,数据采用十六进制格式,前三个数字是静态的,而后两个数字是动态的)
但实际发送的是 23,57,12,0F,D9 。在这里,将0F转换为十进制数只能得到15,这是不希望发送的。
我用于转换数据的代码如下
public sendToDevice(byte[] b){
....
}
public void prepareMsg(){
byte msg[] = {(byte) 0x23, (byte) 0x57, (byte) 0x12, (byte) 0x00, (byte)
0x00};
String dataValue = "D9";
byte bTemp[] = hex2Byte(checkSum);
msg[3] = bTemp[0];
sendToDevice(msg);
}
public byte[] hex2Byte(String str)
{
byte[] bytes = new byte[str.length() / 2];
for (int i = 0; i < bytes.length; i++)
{
bytes[i] = (byte) Integer
.parseInt(str.substring(2 * i, 2 * i + 2), 16);
}
return bytes;
}
还有一个示例静态定义的数据,
public static final byte msg[] = {(byte) 0x23, (byte) 0x57, (byte) 0x12, (byte) 0x15, (byte) 0xD9};
但是在我的情况下,数据是动态生成的。
如果我使用String.valueOf(Integer.toHexString(b[3])
,我可以正确看到该值,但不幸的是,该方法返回的String无法存储到字节数组中。
在这里,我有两个问题,
1。。如何将字符串(D9)转换为十六进制并存储到字节数组中。
2。如何避免15转换为0F并按照我在上面的解释中描述的方式发送数据。