分割和分配字符

Split and Assign char

本文关键字:字符 分配 分割      更新时间:2023-10-16

我是c++和Arduino的新手。

我有三个char

类型的变量
char receivePayload[31];
char devID;
char switchState;

receivePayload中的数据将是"01:01"或"01:00"之类的。这里冒号前的第一部分是设备ID,第二部分是switchState。

你能帮我解释一下如何把这两个分开吗?我确实读过有关中风的书,但无法理解。

期望的输出类似于

devID would have 01 stored and 
switchState would have 01 or 00 stored.

如果我能把它转换成整数。

对于您的问题,有多种解决方案:一种是使用std::getline作为标记器。另一种是用std::string::findstd::string::substr。另一个解决方案是使用旧的C函数strtok

上面的解决方案都给你字符串,所以你要么必须使devIdswitchState字符串,或者使用std::stoi将字符串转换为整数。


显然Arduino平台没有上面列出的功能,这意味着您必须自己对字符串进行标记。然而,这是非常简单的:找到分隔符(':'字符),从开头复制到(但不包括)分隔符到一个临时字符串,并将其转换为一个整数,例如std::strtol。然后从(但不包括)分隔符复制到临时字符串中,并将该值转换为整数。

如果你甚至没有std::strtol,那就用std::atoi

由于这是Arduino,您可能应该使用String类,因为它处理了很多恼人的东西,如转换为int,而无需显式链接到glibc

你可以像这样分割字符串:

String receivedPayload("01:10");
String devId = receivedPayload.substring(0, receivedPayload.indexOf(':'));
String switchState = receivedPayload.substring(receivedPayload.indexOf(':'));

将它们转换为整数只需要在字符串对象上使用toInt

如果您不需要转换为整数,那么使用for循环并检查字符是否等于':'来标记字符串会更容易,因为字符串太短了。