Android中的十六进制到字节转换问题

时间:2019-04-18 19:51:26

标签: arrays casting hex byte boxing

我正在使用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并按照我在上面的解释中描述的方式发送数据。

0 个答案:

没有答案