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 |

浙公网安备 33010602011771号