【发布时间】: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。如果你不想花时间去做,没有人会愿意花时间在你的问题上。
-
tBOOL和tpUINT8都不是标准类型。我们可以猜测它们是什么,但你最好告诉我们。 -
UINT8 可以与 unit8_t 相同。据我所知 char 和 unit8_t 的大小是相同的,因此在函数中传递 char 类型是有效的。但我不确定它是否会改变任何价值。
-
值为 UINT8,但 atoi 需要一个指针。
-
不要无缘无故地混合类型,即使它们是同一事物的别名。对于字符串,您应该始终使用
char*和char数组。
标签: c type-conversion c-strings unsigned-integer atoi