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

}
posted @ 2020-03-04 21:47  chenlife  阅读(1444)  评论(0编辑  收藏  举报