Arduino int 到字符串的转换

Posted

技术标签:

【中文标题】Arduino int 到字符串的转换【英文标题】:Arduino int to String conversion 【发布时间】:2015-05-21 03:35:28 【问题描述】:

我有这个代码:

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。这告诉我,当我将IntBTLEserial.read() 更改为字符串c 时,我遇到了转换问题。

这里发生了什么,将BTLEserial.read() 转换为类型String 的正确方法是什么?

【问题讨论】:

为什么您确信您看到的“疯狂整数值”不是从蓝牙读取的第一个字符?请提供更多详细信息和示例输出... 发送到我的蓝牙的字符串的第一个字符是 0,Serial.println() 行打印的字符是 8。 从一个数字构造一个字符串会产生一个包含该数字的 ASCII 表示的字符串。 正如文档所说,所以你的构造是正确的。 您将charAt(1) 更改(编辑3)为charAt(0) 并且仍然看到相同的输出,这非常令人困惑。请问String.charAt函数现在是如何工作的? 【参考方案1】:

我做了一个测试println()语句打印c的值,发现当BTLEserial.read()为0000时它的值为48

不足为奇。 “0”的ASCII值是48。

Adafruit_BLE_UART::read() 返回的“int”是最近收到的字节;如果你想接收多个字节,例如字符串“0000”,那么您需要多次调用它,每次都将字符添加到缓冲区中。

【讨论】:

就是这样!深入了解 read() 函数,以及在我的字符串转换中发生的隐式 ASCII 转换。【参考方案2】:

难道String 对象的第一个字符位于索引 0 处?所以实际上,您正在读取字符串后面的一个字符(它不包含空字符,如the docs)。

一个方便的 String 实现应该抛出一个异常,或者至少警告你你正在阅读越界。但在 Arduino 上,您需要自己验证边界检查(嘿,它是嵌入式的)。

【讨论】:

很好,但无论哪种方式,它都不应该返回 8,因为字符串中的任何地方都不存在 8。 响应您的编辑,如果我错了,请纠正我,但 charAt(1) 并没有越界,因为索引 1 只是第二个字符。不是第一个,如我所愿,但也没有越界。

以上是关于Arduino int 到字符串的转换的主要内容,如果未能解决你的问题,请参考以下文章

Arduino进行串行读取字符串拆分然后转换为Int

Arduino:将字符串十六进制“#FFFFFF”转换为 3 int

arduino 中如何将字符串型转换为float型?

arduino int强制转换char

Arduino - 处理串行通信

Arduino通过串口读取多个字符串,并且转换为数字数组