【问题标题】:Embedded C - string to char array [closed]嵌入式 C - 字符串到字符数组 [关闭]
【发布时间】:2018-11-19 13:11:27
【问题描述】:

我有如下字符串 "123 132 244" 其中条目的最大值为 255

如何将该字符串转换为

无符号字符 arr[3] = [123, ,132, ,244]

【问题讨论】:

  • [123, ,132, ,244] 应该代表什么?
  • 已编辑问题
  • 你可以使用strtok并用空格分隔字符串并将其保存为char数组吗?
  • 是的,但结果数组每个元素只有一个字符
  • unsigned char arr[3] = [123, ,132, ,244] 语法无效,无法编译。你的意思是unsigned char arr[3] = {123, 132, 244};?

标签: c embedded


【解决方案1】:
  1. 第一步:验证字符串的格式(数字-一空格-数字-一 空间...)
  2. 第二步:计算空格数
  3. 第 3 步:分配最终数组
  4. 第四步:使用strtok有token + sscanf将字符串转为数字
  5. 第 5 步:返回数组(+ 数组大小?总是有用的)。

你在哪一步有困难?

【讨论】:

  • 标签embedded 可能并不重要。 string.h(等)可能不可用。
  • @FiddlingBits 我不熟悉嵌入式 C,但仍然可以使用 int 的“手动” strok 和 sscanf。如果您必须重新编码该部分,您甚至可以合二为一。
【解决方案2】:

表达式"123 132 244" 是一个字符串文字。如果您有权访问字符串函数,例如 strtok()(在 strings.h 中定义),则使用 strtok() 和字符串将字符串解析为三个 char 值转换器,例如 atoi() 或 strtol()。如果您无权访问strings.h,则需要以另一种方式将字符串转换为无符号字符。这是一个例子:

const char str[] = {"123 132 244"};

void convertStr(const char *string, unsigned int ucArr[3], size_t size);

int main(void)
{
    unsigned int ucArray[3];
    convertStr(str, ucArray, sizeof(str)/sizeof(str[0]));

    return 0;
}

void convertStr(const char *string, unsigned int ucArr[3], size_t size)
{
    int i=0, j=0, k=0;
    int accum[3] = {0};//store numeric version of 3 alpha characters
    int ex = 0;//use in conversion of single digit value to place value.
    int acm = 0;//accumulate integer value of 3 successive integer values
                //stored in accum

        while(1)
        {
            if(isdigit(*string))
            {
                accum[i] = *string - '0';
                i++;
            }
            else
            {
                //convert
                for(k=i-1;k>=0;k--)
                {
                    ex = pow(10, k);
                    acm += accum[i-k-1]*ex;
                }
                ucArr[j] = acm;
                j++;
                i=0;
            }
            acm = 0;
            if(*string == NULL) break;
            *string++;
        }
}

【讨论】:

  • 嵌入式系统更可能无法访问pow,而不是string.h。 pow 意味着你必须加载一些你不想要的软件浮点库,除非你真的有 FPU。在一段时间循环中使用strtoul 可能是正确的解决方案。
  • @Lundin - 将编辑...
  • 不需要,因为问题已关闭,最终可能会被 Roomba 机器人删除。
  • @Lundin - 好的。无论如何,感谢您的输入。我不做很多嵌入式,所以不知道大多数开发系统为较小的 uP 提供了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
相关资源
最近更新 更多