dtostrf 将字节和浮点数转换为char


在任何其他C / C ++平台中,当您要使用printf或其同级元素打印(或转换为字符串)浮点数时,可以将“%f”用作格式说明符任何,除了在Arduino中。

要转换浮点,您需要使用dtostrf()

char * dtostrf( double __val, signed char __width, unsigned char __prec, char * __s)

dtostrf()函数将在val中传递的双精度值转换为ASCII表示形式,并将其存储在s下。调用方负责提供足够的存储空间。

转换以“ [-] d.ddd”格式进行。输出字符串的最小字段宽度(包括可能的“。”和可能的负值符号)以宽度给出,prec确定小数点后的位数。宽度是带符号的值,向左调整为负。

dtostrf()函数将指针返回转换后的字符串s。

要将字节(或任何非浮点数)转换为ascii,请使用 snprintf()

int snprintf ( char * s, size_t n, const char * format, ... );

将格式化的输出写入大小已设置的缓冲区。

如果在printf上使用了format,则使用与要打印的文本相同的字符串组成一个字符串,但是内容将作为C字符串存储在由s指向的缓冲区中(而不是被打印)(将n作为要填充的最大缓冲区容量)。

您可以自己阅读详细信息,但这是一个演示。

这个想法是产生buffer一个传统的C风格的字符串(空终止)。您可以打印或传输的字符串。

浮点值分两步打印。首先,我们dtostrf将浮点值转换为他的ascii表示形式。然后,我们snprintf将该值(作为字符串)包含在整行中,然后打印出来。

void setup() { Serial.begin(9600); while(!Serial); Serial.println("Start"); float value = 123.45; byte balue = 128; char buffer[80]; char fValue[16]; dtostrf(value, 3, 2, fValue); snprintf(buffer, sizeof(buffer), "float %s", fValue); Serial.println(buffer); snprintf(buffer, sizeof(buffer), "byte value is %d", (int) balue); Serial.println(buffer); } void loop() { }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM