【发布时间】:2020-07-30 18:50:18
【问题描述】:
我正在解析来自“黑盒”屏幕控制器的字符串,并认为我可以使用枚举来解释各种参数。我试图理解为什么我的方法不起作用,虽然我知道它与类型和强制转换有关,但我似乎无法得出结论。我想知道它是否只是从根本上错误的方法,或者我错过了一些更基本的东西。流作为以 \n 结尾的字符串数组到达,我将其拆分,但随后需要根据“str[0]”中的“字母”来分析处理值的每个“令牌”的第一个字母。
显然没有理解重点,我不是在寻找编码解决方案,只是为了了解我的错误假设在哪里。
enum TL_parEnum : char {X = 0, Y = 1, Z = 2};
struct TL_params {
bool seen;
float value;
};
TL_params TL_parbuffer[9]{false,0};
while (TL_parsub = strtok_r(TL_param, " ", &TL_param)) {
char p = TL_parsub[0];
switch (TL_parsub[0]) {
case 'Y' :
TL_parbuffer[p].seen=true;
TL_parbuffer[(TL_parEnum)p].value =atoi(&TL_parsub[1]);
}
上面失败了,因为 (TL_parEnum)p 没有通过枚举进行评估,我得到 char 'Y' 或 ascii 59。但是如果我硬编码 (TL_parnum)Y,它会按预期工作。
我尝试过在 char、*char 甚至是我自己的结构(如 TL_parEnum(j))之间进行转换,但我只得到了 ascii 代码或字母,而不是我可以用来“解码”枚举的东西。
那么我是否对这应该如何工作做出了糟糕的假设?
这也是针对嵌入式控制器的,所以我无法访问所有 C++ 好东西,我想知道这是否是一个因素。
【问题讨论】:
-
(TL_parEnum)char j[0]; // fails and returns ascii code for Y.. ?从上面看,char j = Y;也让这个问题有点......“不清楚”。 -
char j[0];不是有效的 C++ -
你重复了变量名。