Converti Int in Char Array in C++

Jinku Hu 12 ottobre 2023
  1. Usa la funzione std::sprintf per convertire int in char*
  2. Combina i metodi to_string() e c_str() per convertire int in char*
  3. Usa i metodi di classe std::stringstream per la conversione
  4. Usa la funzione std::to_chars per convertire int in char*
Converti Int in Char Array in C++

Questo articolo spiegherà come convertire int in un char array (char*) usando metodi diversi.

Nei seguenti esempi, supponiamo di memorizzare l’output del buffer di memoria di conversione e, per scopi di verifica, restituiremo il risultato con std::printf.

Usa la funzione std::sprintf per convertire int in char*

Per prima cosa, dobbiamo allocare spazio per memorizzare una singola variabile int che convertiremo in un buffer char. Notare che il seguente esempio definisce la lunghezza massima MAX_DIGITS per i dati interi. Per calcolare la lunghezza del buffer di caratteri, aggiungiamo sizeof(char) perché la funzione sprintf scrive automaticamente la stringa di caratteri che termina il byte \0 nella destinazione. Quindi dovremmo occuparci di allocare abbastanza spazio per questo buffer.

#include <iostream>

#define MAX_DIGITS 10

int main() {
  int number = 1234;
  char num_char[MAX_DIGITS + sizeof(char)];

  std::sprintf(num_char, "%d", number);
  std::printf("num_char: %s \n", num_char);

  return 0;
}

Produzione:

num_char : 1234

Nota che chiamare sprintf con buffer sorgente e destinazione sovrapposti (es. sprintf(buf, "%s some text to add", buf)) non è raccomandato in quanto ha un comportamento indefinito e produrrà risultati errati a seconda del compilatore.

Combina i metodi to_string() e c_str() per convertire int in char*

Questa versione utilizza i metodi della classe std::string per eseguire la conversione, rendendola una versione molto più sicura rispetto a sprintf come mostrato nell’esempio precedente.

#include <iostream>

int main() {
  int number = 1234;

  std::string tmp = std::to_string(number);
  char const *num_char = tmp.c_str();

  printf("num_char: %s \n", num_char);

  return 0;
}

Usa i metodi di classe std::stringstream per la conversione

Questo metodo è implementato usando la classe std::stringstream. Vale a dire, creiamo un flusso temporaneo basato su stringhe in cui memorizzare i dati int, quindi restituire l’oggetto stringa con il metodo str e infine chiamare c_str per eseguire la conversione.

#include <iostream>
#include <sstream>

int main() {
  int number = 1234;

  std::stringstream tmp;
  tmp << number;

  char const *num_char = tmp.str().c_str();
  printf("num_char: %s \n", num_char);
  ;

  return 0;
}

Usa la funzione std::to_chars per convertire int in char*

Questa versione è una funzione in puro stile C++ aggiunta in C++ 17 e definita nell’intestazione <charconv>. Tra i lati positivi, questo metodo offre operazioni su intervalli, che potrebbero essere la soluzione più flessibile in scenari specifici.

#include <charconv>
#include <iostream>

#define MAX_DIGITS 10

int main() {
  int number = 1234;
  char num_char[MAX_DIGITS + sizeof(char)];

  std::to_chars(num_char, num_char + MAX_DIGITS, number);
  std::printf("num_char: %s \n", num_char);

  return 0;
}
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - C++ Integer

Articolo correlato - C++ Char