c中的无符号整数和整数指针

问题描述

我有一个代码,我通过了 300000(以毫秒为单位的 5 分钟值) 在功能上。

            BOOL setsomethingfunc(tpUINT8 value) //tpUINT8 is integer pointer
            {
               bufVal=atoi(value); //bufVal is type UINT8
            }

现在,当我打印 bufVal 时,它显示为 224。我无法理解值转换是如何发生的。有人可以解释一下吗? 所以,整数指针有 - 300000,当转换为 int 时,它变成 224。

我已经为场景设计了一个最小的可重现示例 -

            #include <stdio.h>
            #include <stdlib.h>
            #include <stdint.h>

            int main()
            {
                uint8_t backoff;
                char* value = "300000";
                backoff=atoi(value);
                printf("value = %s\n",value);
                printf("backoff value = %d\n",backoff);

                return (0);
            }

输出为 -

            value = 300000
            backoff value = 224

有人可以帮助我了解这种转换是如何发生的吗?

解决方法

  1. BOOL setsomethingfunc(UINT8 value) 你的函数应该采用指针而不是整数。它必须是 BOOL setsomethingfunc(UINT8 *value)

  2. 使用标准的 C 类型。 uint8_t 表示 8 位无符号整数,bool 来自 stdbool.h。由于历史原因,许多旧代码(或很久以前开始开发的代码,如 Linix 内核)使用这些非标准类型。你应该学习现代 C