【发布时间】:2018-02-28 16:56:12
【问题描述】:
我需要向物联网发送数据,数据需要以字节为单位
要通过 The Things Network 来回发送数据,您需要使用 字节
一些函数返回一个带 2 个小数的浮点数
23.56 要么 4.32
我很难转换我的浮点数并将其保存到一个变量 uint8_t 我的数据中。我必须找到如何转换我的浮点变量
我有一个这样的循环:
/*
NOTE:
uinit8_t mydata[64];
byte nbMaxCapteurs = 10;
mesMesures[i][mesCapteur[i].idDuCapteur].valeur => this is a float
*/
memset(mydata, 0xFF, 64);
uint8_t * ptr = mydata;
for (byte i = 0; i < nbMaxCapteurs; i++) {
if (mesCapteur[i].actif) {
*ptr = mesMesures[i][mesCapteur[i].idDuCapteur].valeur;
ptr += 15; // How to know the number of step to move the pointer
if (i < nbCapteurActif + 1) {
*ptr = 0x2C; // virgule
ptr += sizeof(char);
}
} else {
*ptr = 0x2C; // virgule pour les capteurs inactifs
ptr += sizeof(char);
}
}
*ptr = '00'; // Close \0
ptr += sizeof(char);
printData();
我对这种转换非常陌生。真正的问题在这里:
*ptr = mesMesures[i][mesCapteur[i].idDuCapteur].valeur;
printData 打印这个:
04 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2C 18 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2C CB FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2C A8 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2C
但它至少应该打印这个:
34 2E 33 32 FF FF FF FF FF FF FF FF FF FF FF 2C 18 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2C CB FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2C A8 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2C
因为34 2e 33 32 等于 4.32。
我不明白也不知道如何“合并”和转换浮点值。然后你能帮我按照浮动的大小移动指针吗?
我真的被这个话题所困扰,非常感谢您的帮助。
【问题讨论】:
-
您认为
uint8_t可以代表多少个不同的值?小数点分隔符前后两位小数各有多少个值? -
uint8_t 只有 8 位,所以只有 256 个可能的值。 1 位 + 2 位小数的 double 有 1000 个可能的值,所以这是不可能的。
-
您只是在问如何将数字四舍五入到小数点后两位吗?还是您真的要求将其放在
uint8_t中? -
((int)(luminosity * 100))/100.0应该为你做这件事 -
"我猜 uint8 不保留小数点"。好吧,对于初学者来说,这是一个integer。根据定义,它没有小数。
标签: arduino hex byte uint8t arduino-c++