首页 > 解决方案 > 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”正确显示?

标签: javaandroidserial-communication

解决方案


当您调用 时String.getBytes(),将使用您平台的默认字符集对字符串中的字符进行编码。从您所看到的情况来看,默认字符集是 UTF-8。

如果您希望将 128 到 255 范围内的字符编码为单个字节,那么您需要使用将字符 0 - 255 映射到字节 0 - 255 的字符集。我认为 LATIN-1 可以解决问题。


推荐阅读