簡體   English   中英

在 Arduino function 中將長 integer 作為 char* 寫入字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM