我正在开发一个应用程序,其中作为输入我必须给BLE一个十六进制值作为时间参数,以便设备运行那么长时间。我已经尝试了所有我知道的但它不起作用。请帮我解决一下。
AppConstants.pulse_time.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT);
AppConstants.gatt.setCharacteristicNotification(AppConstants.pulse_time, true);
// AppConstants.pulse_time.setValue(3, BluetoothGattCharacteristic.FORMAT_UINT16, 0);
// AppConstants.pulse_time.setValue(toBytes(03));
// AppConstants.pulse_time.setValue(toHex(""+3));
// AppConstants.pulse_time.setValue("0x2");
// AppConstants.pulse_time.setValue(convertStringToHex("32"));
AppConstants.pulse_time.setValue("0x"+ Integer.toHexString(2));
// AppConstants.pulse_time.setValue(String.format("%02x","2"));
// AppConstants.pulse_time.setValue(Integer.toString(2, 16));
// AppConstants.pulse_time.setValue(hexStringToByteArray("0x2"));
// AppConstants.pulse_time.setValue(31,BluetoothGattCharacteristic.FORMAT_UINT8,0);
// AppConstants.pulse_time.setValue(toBytes(3));
AppConstants.gatt.writeCharacteristic(AppConstants.pulse_time);
private String convertStringToHex(String string)
{
StringBuilder newString = new StringBuilder();
for (int i=0; i<string.length(); i++)
{
newString.append(String.format("%02X ", (byte)(string.charAt(i))));
}
return newString.toString();
}
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;
}
public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for ( int j = 0; j < bytes.length; j++ ) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
答案 0 :(得分:0)
晚上好,请你解释一下这种“十六进制”的结果应该是什么样的细粒度?你需要两个函数,在字符串和十六进制(十六进制数)之间进行转换?
如果代码是Java,请参考:
public static int convert(int n) {
return Integer.valueOf(String.valueOf(n), 16);
}
或:
Integer.toHexString(int)
我知道这只是一个整数,而不是一个字符串。请解释一下,“AppConstants.pulse_time.setValue”期望什么作为参数。