拆分和分配字符

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::findstd::string::substr。另一个解决方案是使用旧的 C 函数 strtok

上述解决方案都为您提供字符串,因此您要么必须同时制作devIdswitchState 字符串,要么使用例如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);并得到同样的错误。

以上是关于拆分和分配字符的主要内容,如果未能解决你的问题,请参考以下文章

我需要在拆分方法c#之后将字符串分配给数组列

拆分声明和分配 = 良好实践? [关闭]

rbac04权限分配任务拆分

SC2207 来自 subshel​​l 的 Bash 数组分配未按预期拆分

getline 拆分字符串操作错误

在类构造函数中拆分字符串