Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拆分并分配字符 我是C++和ARDUINO的新手。_C++_Char_Arduino - Fatal编程技术网

拆分并分配字符 我是C++和ARDUINO的新手。

拆分并分配字符 我是C++和ARDUINO的新手。,c++,char,arduino,C++,Char,Arduino,我有3个char类型的变量 char receivePayload[31]; char devID; char switchState; receivePayload中的数据可能类似于“01:01”或“01:00”。这里冒号前面的第一部分是设备ID,第二部分是switchState 你能帮我解释一下我怎样才能把2分开吗。我确实读过关于斯特克的书,但无法理解 所需的输出如下 devID would have 01 stored and switchState would have 01 or

我有3个char类型的变量

char receivePayload[31];
char devID;
char switchState;
receivePayload中的数据可能类似于“01:01”或“01:00”。这里冒号前面的第一部分是设备ID,第二部分是switchState

你能帮我解释一下我怎样才能把2分开吗。我确实读过关于斯特克的书,但无法理解

所需的输出如下

devID would have 01 stored and 
switchState would have 01 or 00 stored.
如果我能把它转换成整数


非常感谢。

对于您的问题,有多种解决方案:一种是用作标记器。另一个是使用和。另一个解决方案是使用旧的C函数

上述解决方案都会给您字符串,因此您必须同时生成
devId
switchState
字符串,或者使用例如将字符串转换为整数


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


如果您甚至没有
std::strtol
,那么就使用。

因为这是Arduino,您可能应该使用该类,因为它可以处理许多烦人的东西,比如转换为
int
,而不必显式链接到
glibc

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

String receivedPayload("01:10");
String devId = receivedPayload.substring(0, receivedPayload.indexOf(':'));
String switchState = receivedPayload.substring(receivedPayload.indexOf(':'));
将它们转换为整数只需要在字符串对象上使用


如果您不需要转换为整数,那么通过使用for循环并检查字符是否等于
:'
,您可以更轻松地标记字符串,因为字符串很短。

更正:您有两个
char
类型的变量,还有一个数组类型的变量
char
。Arduino没有这两个。@Rapptz甚至没有
strtok
?据我所知不是。它没有glibc提供的许多函数(甚至没有printf),但您可以链接它们。只需包含它们(您必须导入它们)我添加了对string.h的引用,string函数可用,如何将char分配到string中。我做了以下操作:String rcvPayld=receivePayload;我收到错误:从“char”到“const char*”的转换无效。请提供任何建议。我还尝试了字符串rcvPayld(receivePayload);得到了同样的错误。