字节数组到字符串的转换

Byte array to string conversion

我正在制作一个与蓝牙设备通信的 Android 应用程序。我正在为所选特征写一条特定消息,如下所示:

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);

我的转换函数如下所示:

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();
    }

我想弄清楚为什么在这种情况下我的转换输出看起来像这样:

D/uploadDataset: Message: ��������������������

这很奇怪,因为当我使用相同的转换函数来转换我作为蓝牙通知接收的值时,它工作得非常好。欢迎任何问题所在的建议

扔掉你的 StringBuilder 东西。

 return new String(hexChars);