0x0A和0x0D的区别

2022-09-03 18:09:01

我正在学习蓝牙,我试图编写代码以在连接时继续收听输入流,我遇到了以下代码片段:

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之间的区别吗?并简要说明此代码。请分享您的观点。


答案 1

起始值为十六进制。 是换行符,并且是返回字符。您可以在此处阅读有关如何转换它们的更多信息,或使用转换图表0x0x0A\n0x0D\r

代码基本上运行不同的逻辑块,具体取决于从datammInStream

简要:

  • 当 is 时,换行符,则跳过它,并且不将其添加到data0x0A\narr_byte
  • 当 是 时,返回字符 ,它从中构建缓冲区并将缓冲区发送到 UI 活动data0x0D\rarr_byte
  • 当 是任何其他字符时,它被添加到dataarr_byte

希望这有帮助。


答案 2

这两个角色的历史来自打字机中的动作。要开始新行,有两个机械操作:返回以将滑块带回当前行的开头,以及返回将纸张推进到下面的新空白行的新行。因此,ASCII 中有两个代码用于这两个操作。两者最初在早期的文本编辑器中以相同的顺序(返回,新行)一起使用,但更现代的编辑器通常只需要一个,通常是返回。