0x0A和0x0D的区别

15

我在学习蓝牙,并且试图编写代码,在连接时保持对输入流的持续监听,然后我遇到了以下这段代码片段:

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之间的区别吗?并且还可以简要说明一下这段代码。请分享你的看法。


3
这些是十六进制编码。在这种情况下,可能是指换行符:0x0D == '\r'0x0A == '\n' - Alexander O'Mara
3个回答

35

0x开头的数值是十六进制数,0x0A\n换行符,0x0D\r回车符。您可以在这里阅读有关如何转换它们的更多信息,或使用转换表

代码根据从mmInStream读取的data值运行不同的逻辑块:

简要描述:

  • data0x0A时,即换行符\n时,它会被跳过,不会添加到arr_byte中。
  • data0x0D时,即回车符\r时,它会从arr_byte创建一个缓冲区,并将该缓冲区发送到UI Activity。
  • data为其他字符时,它将被添加到arr_byte中。

希望这能有所帮助。


@RasikSuhail 很高兴能帮忙 :) 如果答案解决了你问题中提到的问题,将其提升并标记为解决方案总是很好的。 - Ling Zhong

0
这两个字符的历史源于打字机上的操作。要开始新行,有两个机械动作:回车将打印头移回当前行的开头,换行将纸张推进到下一行的空白处。因此,在ASCII中有这两个动作的代码。早期的文本编辑器通常按照相同的顺序(回车、换行)使用这两个字符,但现代的编辑器通常只需要一个,通常是回车。

0

我的理解是,回车和换行字符的起源可以追溯到1901年,当时Murray对Baudot代码(ITU1)进行了修改。

这使得电传打字机和电传打印机的标准化成为可能。

当前代码名称与原始含义有关。回车导致打印“车”返回左侧。换行导致纸张进纸机构向前进一行。


在现代用法中,CR 和 LF 编码大致具有相同的含义,不过这完全取决于软件。值得注意的是,不同操作系统在简单文本文件中使用 CR 和/或 LF 作为“行分隔符”。这些约定是特定于操作系统的。

在某个时刻,“line feed”这个原始名称在常见用法中变成了“newline”。然而,在 EBCDIC 中存在一个明显的 NL 编码...它通常被映射到 Unicode 中的 NEL(U+85)。

参考:维基百科


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接