[英]Writing an long integer to an string as char* in Arduino function
我整晚都在為這個問題而戰,但對我沒有任何幫助……我已經嘗試了很多基於 inte.net 的方法,但我仍然被鎖在這里。
我只想在 char 字符串中間寫一個數字,以使用基於 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
返回一個長值,因此要獲得您想要的結果,您應該首先調整您的參數:
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.