c中的无符号整数和整数指针[关闭]

Posted

技术标签:

【中文标题】c中的无符号整数和整数指针[关闭]【英文标题】:unsigned integer and integer pointer in c [closed] 【发布时间】:2021-06-08 20:03:30 【问题描述】:

我有一个代码,我通过了 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

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

【问题讨论】:

提供minimal reproducible example。如果你不想花时间去做,没有人会愿意花时间在你的问题上。 tBOOLtpUINT8 都不是标准类型。我们可以猜测它们是什么,但你最好告诉我们。 UINT8 可以与 unit8_t 相同。据我所知 char 和 unit8_t 的大小是相同的,因此在函数中传递 char 类型是有效的。但我不确定它是否会改变任何价值。 值为 UINT8,但 atoi 需要一个指针。 不要无缘无故地混合类型,即使它们是同一事物的别名。对于字符串,您应该始终使用 char*char 数组。 【参考方案1】:

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

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

【讨论】:

如果代表一个字符串,char* 是合适的。 令人讨厌的是,#define UINT8 uint8_t 有很多工具。坚持标准中定义的类型可以提高可读性、可维护性等...... 根据您的评论编辑了问题,发现我在这里错过了一个整数指针。

以上是关于c中的无符号整数和整数指针[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Swift中的无符号整数到负整数

Java不提供无符号整数类型?谢谢

C语言编程中的指针

整数的无符号编码和有符号编码

C中的无符号十六进制常量?

如何在python中将有符号整数转换为无符号整数