我正在研究蓝牙,并且尝试编写代码以在连接时继续监听输入流,并且遇到了以下代码片段:

int data = mmInStream.read();
   if(data == 0x0A) {
                } else if(data == 0x0D) {
                    buffer = new byte[arr_byte.size()];
                    for(int i = 0 ; i < arr_byte.size() ; i++) {
                        buffer[i] = arr_byte.get(i).byteValue();
                    }
                    // Send the obtained bytes to the UI Activity
                    mHandler.obtainMessage(BluetoothState.MESSAGE_READ
                            , buffer.length, -1, buffer).sendToTarget();
                    arr_byte = new ArrayList<Integer>();
                } else {
                    arr_byte.add(data);
                }

有人可以解释0x0A和0x0D有什么区别。并给出有关此代码的简要说明。
请分享您的意见。

最佳答案

0x开头的值是十六进制。 0x0A\n换行符,而0x0D\r返回符。您可以阅读有关如何将它们转换为here或使用conversion chart的更多信息。

该代码本质上运行不同的逻辑块,具体取决于从data读取什么mmInStream

简要地:

  • data0x0A时,换行符\n会被跳过,并且不会添加到arr_byte
  • data0x0D时,即返回字符\r,它从arr_byte构建一个缓冲区并将该缓冲区发送到UI Activity
  • 如果data是任何其他字符,则将其添加到arr_byte

  • 希望这可以帮助。

    10-05 20:10