java - java串行通信中超过127的值显示为“ef bf bd”的问题
问题描述
我正在尝试通过与另一台设备的串行通信来接收和显示字节值。
public void handleMessage(Message msg)
{
switch (msg.what)
{
case UsbService.MESSAGE_FROM_SERIAL_PORT:
String data = (String) msg.obj;
String prt = byteArrayToHex(data.getBytes());
mActivity.get().display.append(prt);
break;
}
}
static String byteArrayToHex(byte[] a)
{
StringBuilder sb = new StringBuilder();
for (final byte b : a)
{
sb.append(String.format("%02x ", b & 0xff));
}
return sb.toString();
}
但是,上面的代码有个问题,就是“aa”的值变成了“ef bf bd”。
127 以内的值很好。
所以,一开始改成String似乎是个问题,所以如果我使用“byte[] data = (byte[]) msg.obj;”,它会在执行过程中崩溃。
如何让值“aa”正确显示?
解决方案
当您调用 时String.getBytes()
,将使用您平台的默认字符集对字符串中的字符进行编码。从您所看到的情况来看,默认字符集是 UTF-8。
如果您希望将 128 到 255 范围内的字符编码为单个字节,那么您需要使用将字符 0 - 255 映射到字节 0 - 255 的字符集。我认为 LATIN-1 可以解决问题。
推荐阅读
- intellij-idea - 使用 IntelliJ IDE 进行本地开发,但从远程机器进行测试
- android-studio - Android Studio 4.0 无法识别任何以前的虚拟设备
- c++ - 编写 MethodChannel 桥与 dart:ffi 桥以运行 c/c++ 代码以获取响应之间有什么区别?
- python - Python IndexError:列表索引超出范围。有人能帮我吗?
- electron - 包括非电子文件夹作为 NSIS 安装的一部分
- wordpress - Woocommerce 产品仅“有货”
- ipad - GWT:文本框在 Ipad 上不显示光标
- java - Java Regex 将连续的单词和数字返回到 arraylist
- python - python中序列中碱基的频率
- python - 如何根据两列过滤时间序列熊猫数据框?