字节数组到字符串的转换
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);
我正在制作一个与蓝牙设备通信的 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);