分割和分配字符
Split and Assign char
我是c++和Arduino的新手。
我有三个char
类型的变量char receivePayload[31];
char devID;
char switchState;
receivePayload中的数据将是"01:01"或"01:00"之类的。这里冒号前的第一部分是设备ID,第二部分是switchState。
你能帮我解释一下如何把这两个分开吗?我确实读过有关中风的书,但无法理解。
期望的输出类似于
devID would have 01 stored and
switchState would have 01 or 00 stored.
如果我能把它转换成整数。
对于您的问题,有多种解决方案:一种是使用std::getline
作为标记器。另一种是用std::string::find
和std::string::substr
。另一个解决方案是使用旧的C函数strtok
。
上面的解决方案都给你字符串,所以你要么必须使devId
和switchState
字符串,或者使用std::stoi
将字符串转换为整数。
显然Arduino平台没有上面列出的功能,这意味着您必须自己对字符串进行标记。然而,这是非常简单的:找到分隔符(':'
字符),从开头复制到(但不包括)分隔符到一个临时字符串,并将其转换为一个整数,例如std::strtol
。然后从(但不包括)分隔符复制到临时字符串中,并将该值转换为整数。
如果你甚至没有std::strtol
,那就用std::atoi
。
由于这是Arduino,您可能应该使用String
类,因为它处理了很多恼人的东西,如转换为int
,而无需显式链接到glibc
。
你可以像这样分割字符串:
String receivedPayload("01:10");
String devId = receivedPayload.substring(0, receivedPayload.indexOf(':'));
String switchState = receivedPayload.substring(receivedPayload.indexOf(':'));
将它们转换为整数只需要在字符串对象上使用toInt
。
如果您不需要转换为整数,那么使用for循环并检查字符是否等于':'
来标记字符串会更容易,因为字符串太短了。
相关文章:
- 将超出范围的整数分配给有符号字符类型
- 关于字符数组,我正在尝试将数组中的每个字符分配给另一个值
- 使用动态分配将 char* 复制到另一个字符**
- 将字符逐个分配给指针?
- C++ - 使用基于范围的 for 循环将字符值分配给向量中的字符串不会分配值
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 动态分配字符数组的内存
- C++具有动态分配的字符数组的结构
- 如何在C++中有效地将数字值重新分配给字符数组
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 将常量字符* 分配给字符*
- 为无符号字符* 分配一个数字
- C++错误字符分配
- C++中的模板方法,用于将 wchar_t* 或字符* 分配给数组
- 为什么C++允许我将常量字符分配给常量字符 *?
- 如何为以下字符分配数字 "@" 或 "#" 或 "^" 和 "*"
- 将 const 无符号字符* 分配给执行就地替换或省略的 std::string
- 为什么可以将常量字符*分配给字符*
- 在C++上将字符分配给多维字符数组时发生逻辑错误
- 如何使用无符号字符分配 #define