This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220S-LAUNCHXL:如何将文本字符串从 HTTP 转换为 CC3220内的整数

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/633555/cc3220s-launchxl-how-to-convert-text-strings-from-http-into-integers-inside-cc3220

器件型号:CC3220S-LAUNCHXL

您好!

我是 http、在浏览器中向 CC3220发布一个数字、但该数字在 CC3220内部存储为字符串(指针)。 我可以使用以下命令进行打印:

UART_PRINT ("[链路本地任务]值为:%s\n\r\n、(INT8_t *)(argvArray - actualLen - 1));

其中(argvArray - actualLen - 1)是存储数字各个数字的起始地址

如何将该数字传递给 int 变量? 数字可以包含未知的数字数。

请给出建议。

谢谢、

David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以使用以下字符串函数之一将数字从字符串格式转换为整数:

    • strtod: 解析 C 字符串  str ,将其内容解释为浮点数  
    • strtol: 解析 C 字符串  str ,将其内容解释为指定 基址的整数, 该基址作为 long int 值返回
    • strtoul: 解析 C 字符串  str,将其内容解释为指定 基址的整数,并将其返回为类型值 unsigned long int

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复。 我在命令中收到以下警告。
    "int8_t"类型的#169-D 参数与"const char *"类型的参数不兼容

    问题是上述命令要求 const char *作为字符串输入。 但是、在我的示例中、字符串是类似这样的变量(new_value):

    int8_t * new_value;
    new_value =((int8_t *)(argvArray - actualLen - 1));

    现在、当我将 new_value 传递到 strtol 命令时、它与 INT8_t *部分不同。 您能建议权变措施吗?

    谢谢、
    David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否使用警告尝试了它,但得到了错误的值? 我认为无论如何都应该这样做。 您可以简单地将变量转换为 char*,同时将其传递给函数。
    您可以将 new_value 声明为 char*而不是 INT8_t*,我不明白为什么它不起作用。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我进行了测试、请找到以下详细步骤:

    long int new_val_int = 0;
    char * pend;

    new_val_int = strtol (* new_glob_value、&pend、10);

    然后、用于将 new_glob_value 打印为字符串和整数的命令:

    UART_PRINT ("test:printing string (INT8_t *)(new_glob_value)提供以下内容:%s\n"r、(INT8_t *)(new_glob_value));
    UART_PRINT ("test:printing decimal strtol (* new_glob_value、&pend、10)提供以下内容:%d\n\r"、new_val_int);

    结果(我将 new_glob_value 设置为4999):

    测试:打印字符串(INT8_t *)(new_glob_value)提供以下内容:4999
    测试:打印十进制 strtol (* new_glob_value、&pend、10)给出以下值:0

    在某种程度上、strtol 会给出0。 我是否做了错误的事情?

    谢谢、

    David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我应该已经从 strtol 参数中删除了指针。 解决问题、感谢您的帮助。

    David