我有这段代码:
String c = String(BTLEserial.read());
char relevant = c.charAt(0);
Serial.println(relevant);
其中BTLEserial.read()
返回类型Int
。我在第一行将其转换为String
,以便我可以在下一行中使用charAt
函数。
当我发送蓝牙“0000”时,我的println(relevant)
会打印4
。
我做了一个测试println()语句来打印c的值,发现它在BTLEserial.read()为0000
时的值为48
。这告诉我,当我将Int
值BTLEserial.read()
更改为字符串c
时,我遇到了转换问题。
这里发生了什么,以及将BTLEserial.read()
转换为String
类型的正确方法是什么?
答案 0 :(得分:1)
我做了一个测试println()语句来打印c的值,发现它在BTLEserial.read()为
0000
时的值为48
。
不足为奇。 ASCII值“0”为48。
Adafruit_BLE_UART::read()
返回的“int”是收到的最新字节;如果你想要接收多个字节,例如字符串“0000”,那么你需要多次调用它,每次都将字符添加到缓冲区。
答案 1 :(得分:0)
你的String
对象的第一个字符是否在索引0处?实际上,你正在读取在后面的一个字符(它不包含the docs的空字符。)
一个方便的String实现应该抛出一个异常,或者至少警告你你正在读出界限。但是在Arduino上你需要验证自己的界限 - 自己检查(嘿,它是嵌入式的)。