Android BLE中的字节到字符串转换数据不匹配

时间:2016-06-03 06:06:32

标签: android android-layout android-fragments android-studio

我正在将蓝牙低功耗集成到我的应用程序中。这个模块的目的是,我有一些硬件嵌入式设备。这些设备与BLE硬件连接,并且它将使用BLE Notify API将一些数据通知给我的应用程序。这部分工作正常。

问题:

我的问题是数据是作为字节数组接收的,出于某种原因,我想将其转换为字符串。该消息基于串行通信协议传输。当我从字节转换为字符串时,一些数据不匹配正在发生。 我试过了

byte[] receivedArray = intent.getByteArrayExtra(BLEConstants.EXTRA_DATA);
String data = receivedArray.getBytes() // Tried this way
String data = Arrays.toString(receivedArray );  // Tried this way

然后我再次将字符串转换为字节数组

byte[] b = string.getBytes();
byte[] b = string.getBytes(StandardCharsets.UTF_8);  // tried another way
byte[] b = string.getBytes(StandardCharsets.UTF_16); // tried another way
byte[] b = string.getBytes(StandardCharsets.ISO_8859_1); // tried another way

但是结果字节数组与初始字节数组不匹配。

receivedArray!= b。 任何人都有解决方案,请帮助我。

2 个答案:

答案 0 :(得分:1)

试试这个

        String example = "This is an example";
        byte[] bytes = example.getBytes();

        System.out.println("Text : " + example);
        System.out.println("Text [Byte Format] : " + bytes);
        System.out.println("Text [Byte Format] : " + bytes.toString());

        String s = new String(bytes);
        System.out.println("Text Decryted : " + s);
  

输出

Text : This is an example
Text [Byte Format] : [B@187aeca
Text [Byte Format] : [B@187aeca
Text Decryted : This is an example

这可能对你有所帮助。

如需更多信息,请参阅here

答案 1 :(得分:0)

两天前有同样的问题。请参阅此处:Android - How to properly parse a file consisting of bytes delimited with space?。不要使用getBytes()。而是使用Byte.parseByte(String)

而不是

byte[] b = string.getBytes();

使用

byte[] b = Byte.parseByte(data);