我是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.
此外,如果我可以将其转换为整数。
非常感谢。
答案 0 :(得分:2)
至于你的问题,有多种解决方案:一种是使用std::getline
作为标记器。另一种方法是使用std::string::find
和std::string::substr
。另一种解决方案是使用旧的C函数strtok
。
以上解决方案都为您提供字符串,因此您必须同时制作devId
和switchState
字符串,或使用例如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循环并检查字符是否等于':'
就可以更容易地对字符串进行标记,因为字符串是这样的短。