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() {
}