拆分和分配字符

时间:2014-08-11 06:59:38

标签: c++ char arduino

我是C ++和Arduino的新手。

我有3个char类型的变量

char receivePayload[31];
char devID;
char switchState;

receivePayload中的数据可能会像#34; 01:01"或" 01:00"。冒号前的第一部分是设备ID,第二部分是switchState。

你能帮助我并解释我如何分裂2.我读过关于strtok但是无法理解。

所需的输出就像

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

此外,如果我可以将其转换为整数。

非常感谢。

2 个答案:

答案 0 :(得分:2)

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

以上解决方案都为您提供字符串,因此您必须同时制作devIdswitchState字符串,或使用例如std::stoi将字符串转换为整数。


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

如果您甚至没有std::strtol,请使用std::atoi

答案 1 :(得分:1)

由于这是Arduino,你应该使用String类,因为它可以为你处理很多烦人的事情,比如转换到int而不必明确链接glibc

您可以像这样拆分字符串:

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

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

如果你不需要转换成一个整数,那么通过使用for循环并检查字符是否等于':'就可以更容易地对字符串进行标记,因为字符串是这样的短。