拆分和分配字符
Posted
技术标签:
【中文标题】拆分和分配字符【英文标题】:Split and Assign char 【发布时间】:2014-08-11 06:59:37 【问题描述】:我是 C++ 和 Arduino 的新手。
我有 3 个 char 类型的变量
char receivePayload[31];
char devID;
char switchState;
receivePayload 中的数据可能类似于“01:01”或“01:00”。这里冒号前的第一部分是设备ID,第二部分是switchState。
您能帮我解释一下如何拆分 2。我确实读过 strtok 但无法理解。
想要的输出是这样的
devID would have 01 stored and
switchState would have 01 or 00 stored.
如果我能把它转换成整数。
非常感谢。
【问题讨论】:
更正:您有 两个 类型的char
变量和一个 char
类型的数组变量。
【参考方案1】:
至于您的问题,有多种解决方案:一种是使用std::getline
作为分词器。另一个是使用std::string::find
和std::string::substr
。另一个解决方案是使用旧的 C 函数 strtok
。
上述解决方案都为您提供字符串,因此您要么必须同时制作devId
和switchState
字符串,要么使用例如std::stoi
将字符串转换为整数。
显然 Arduino 平台没有上面列出的任何功能,这意味着您必须自己标记字符串。然而,这非常简单:找到分隔符(':'
字符),从开头复制到(但不包括)分隔符到临时字符串,然后将其转换为整数,例如std::strtol
。然后从(但不包括)分隔符复制到临时字符串中,并将该值转换为整数。
如果您甚至没有std::strtol
,请使用std::atoi
。
【讨论】:
Arduino 两者都没有。 @Rapptz 甚至没有strtok
?
我不知道。它没有很多来自 glibc 的功能(甚至没有 printf
)。
但是你可以链接他们。只需包含它们(您必须导入它们)【参考方案2】:
由于这是 Arduino,您可能应该使用 String
类,因为它可以为您处理很多烦人的事情,例如转换为 int
而无需显式链接到 glibc
。
你可以像这样拆分字符串:
String receivedPayload("01:10");
String devId = receivedPayload.substring(0, receivedPayload.indexOf(':'));
String switchState = receivedPayload.substring(receivedPayload.indexOf(':'));
将它们转换为整数只需要在字符串对象上使用toInt
。
如果您不需要转换为整数,那么通过使用 for 循环并检查字符是否等于 ':'
自己标记字符串会更容易,因为字符串太短了。
【讨论】:
我添加了对 string.h 的引用,字符串函数可用,如何将 char 分配给字符串。我做了以下事情: String rcvPayld = receivePayload;我收到错误:从 'char' 到 'const char*' 的无效转换请提供任何建议。 我也试过 String rcvPayld(receivePayload);并得到同样的错误。以上是关于拆分和分配字符的主要内容,如果未能解决你的问题,请参考以下文章