在 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());
我整晚都在为这个问题而战,但对我没有任何帮助... 尝试了很多网上的方法,还是卡在这里。
我只想在一个字符串中间写一个数字,使用基于 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());