I'm making an Android app that communicates with bluetooth device. I'm writing a specific message to chosen characteristic as follows:
byte[] clearDataset = new byte [0x0A];
Log.d("uploadDataset", "Message: " + Converters.byteArrayToHexString(clearDataset, 0, clearDataset.length));
writeCharacteristic(Converters.byteArrayToHexString(clearDataset, 0, clearDataset.length), Constants.DIAG_WRITE);
My conversion function looks like this:
public static String byteArrayToHexString(byte[] bytes, int startingByte , int endingByte) {
byte[] shortenBytes = Arrays.copyOfRange(bytes, startingByte, endingByte);
final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII);
byte[] hexChars = new byte[shortenBytes.length * 2];
for (int j = 0; j < shortenBytes.length; j++) {
int v = shortenBytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
StringBuilder output = new StringBuilder();
for (int i = 0; i < new String(hexChars, StandardCharsets.UTF_8).length(); i += 2) {
String str = new String(hexChars, StandardCharsets.UTF_8).substring(i, i + 2);
output.append((char) Integer.parseInt(str, 16));
}
return output.toString();
}
I'm trying to figure out why in this case my conversion output looks like this:
D/uploadDataset: Message: ��������������������
It is strange, because the same conversion function works perfectly fine when I'm using it to translate the values that I'm receiving as bluetooth notification. Any suggestions where the problem lies are welcome