uint8_t 定义数值被吞掉小数位

问题描述

  今天在调试modbusTCP协议时,采用32位浮点型下发控制 0.05,但是控制器显示下发了 0。
  刚开始我排查的方向是代码是否没有处理小数位,把小数位吞掉了。幸得我导师提醒有可能是数据定义类型出现了错误。回头查看代码,果然,用了uint8 来定义浮点型

//代码示例
void par_value(uint8_t value)
{
    printf("value = %u \n" , value);
}

int main ()
{
    double value =1.2;
    par_value(value);
    return 0;
}

//输出:value = 1

正确的代码

void par_value(double value)
{
    printf("value = %f \n" , value);
}

int main()
{
    doule value = 1.2;
    par_value(value);
    return 0;
}
//输出结果 value = 1.200000

这里要复习一下uint8_t 、uint16_t 、uint64_t 所代表的数据类型

typedef signed char        int8_t;      -2^7 ~ 2^7 -1
typedef short              int16_t;    
typedef int                int32_t;
typedef long long          int64_t;
typedef unsigned char      uint8_t;     0 ~ 2^8-1
typedef unsigned short     uint16_t;
typedef unsigned int       uint32_t;
typedef unsigned long long uint64_t;

在拓展一下 字节的概念。
char -> 1 字节
short -> 2 字节
int -> 4 字节
long long -> 8 字节

补充C语言常用的格式

格式符 数据类型
%d int
%u unsigned int
%ld long
%f float
%lf double
%e double
posted @ 2025-08-08 00:11  开心猪扒  阅读(9)  评论(0)    收藏  举报