在 Arduino 函数中将长整数作为 char* 写入字符串

Writing an long integer to an string as char* in Arduino function

我整晚都在为这个问题而战,但对我没有任何帮助... 尝试了很多网上的方法,还是卡在这里。

我只想在一个字符串中间写一个数字,使用基于 ESP8266 的 nodemcu v3 将其显示在 oled 屏幕上。 这就是我想要在屏幕上显示的内容:S7:3.55V
3.55 可以是 3.02 到 4.87 之间的数字。


实际错误是:invalid conversion from 'long int' to 'char*' [-fpermissive]

#include <Wire.h>
#include "OLED.h"
#include <sstream>
#include <iostream>
#include <string>
#include <cstring>
#include <iomanip>
#include <locale>
        
OLED display(2, 14); //OLED Declarare SDA, SCL
long randNumber;

void setup() {
  Serial.begin(9600);
  Serial.println("OLED test!");

  // Initialize display
  display.begin();
  //display.off();
  //display.on();
  display.clear();
  delay(3*1000);
}

void loop() {
  randNumber = random(3.02, 4.87);

  display.print("S7:", 5);
  display.print(randNumber, 5);
  display.print("V", 5);
  //display.print("Banc: ", 7);
  //display.print(randNumber1, 7);
  //display.print("V", 7);
  delay(3*200);
}

sprintf 是你的朋友,先将数字写入缓冲区,然后打印该缓冲区。然而,您仍然需要一种不同的方式来获得该数字,random returns 一个长值,因此要获得您想要的结果,您应该首先调整您的参数:

randNumber = random(302, 487);

不用担心小数点,我们会通过适当的格式将它们取回(无论如何,完全避免浮点数同时避免了很多主要与舍入问题有关的麻烦)。

char buffer[16];
snprintf
(
    buffer, sizeof(buffer),
    "S7:%ld.%.2ldV", randNumber / 100, randNumber % 100
//      ^3^ ^55 ^    ^------ 3 -----^  ^----- 55 -----^
);

现在简单地打印出来buffer...

备选方案包括例如std::ostringstream,但它们不如旧的 C stdio API:

方便(而且效率不高)
std::ostringstream buffer;
buffer << "S7:" << randNumber / 100 << '.'
       << std::setw(2) << std::setfill('0') << randNumber % 100 << 'V';
print(buffer.str().c_str());