我正在研究蓝牙,我试图编写代码以在连接时继续监听输入流,我遇到了以下代码片段:
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
is \n
换行符和0x0D
is \r
返回字符。您可以阅读有关如何转换它们的更多信息here http://www.javamex.com/tutorials/conversion/decimal_hexadecimal.shtml,或使用换算表 http://www.bluesock.org/~willg/dev/ascii.html
该代码本质上运行不同的逻辑块,具体取决于什么值data
是从读取的mmInStream
Briefly:
- 当。。。的时候
data
is 0x0A
, 换行符\n
,它被跳过并且不添加到arr_byte
- 当。。。的时候
data
is 0x0D
, 返回字符\r
,它构建了一个缓冲区arr_byte
并将缓冲区发送到 UI Activity
- 当。。。的时候
data
是任何其他字符,它被添加到arr_byte
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)