Comment convertir Int en Char Array en C++

Jinku Hu 12 octobre 2023
  1. Utilisation de la fonction std::sprintf pour convertir int en char*
  2. Combinaison des méthodes to_string() et c_str() pour convertir int en char*
  3. Utilisation des méthodes de classe std::stringstream pour la conversion
  4. Utilisation de la fonction std::to_chars pour convertir int en char*
Comment convertir Int en Char Array en C++

Cet article explique comment convertir int en un tableau de caractères (char*) en utilisant différentes méthodes.

Dans les exemples suivants, nous supposons de stocker la sortie de la conversion dans un tampon en mémoire, et pour des raisons de vérification, nous allons sortir le résultat avec std::printf.

Utilisation de la fonction std::sprintf pour convertir int en char*

Tout d’abord, nous devons allouer de l’espace pour stocker une seule variable Int que nous allons convertir dans un tampon “Char”. Notez que l’exemple suivant définit la longueur maximale MAX_DIGITS pour des données entières. Pour calculer la longueur du tampon des caractères, nous ajoutons sizeof(char) parce que la fonction sprintf écrit une chaîne de caractères se terminant par un \0 octet automatiquement à la destination. Ainsi, nous devrions penser à allouer suffisamment d’espace pour ce tampon.

#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;
}

Production:

num_char : 1234

Notez qu’appeler sprintf avec des tampons source et destination qui se chevauchent (par exemple sprintf(buf, "%s some text to add", buf)) n’est pas recommandé car son comportement est indéfini et produira des résultats incorrects selon le compilateur.

Combinaison des méthodes to_string() et c_str() pour convertir int en char*

Cette version utilise les méthodes de la classe std::string pour effectuer la conversion, ce qui en fait une version bien plus sûre que de traiter avec sprintf comme le montre l’exemple précédent.

#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;
}

Utilisation des méthodes de classe std::stringstream pour la conversion

Cette méthode est implémentée en utilisant la classe std::stringstream. A savoir, nous créons un flux temporaire basé sur une chaîne de caractères où sont stockées les données int, puis nous retournons l’objet chaîne par la méthode str et enfin nous appelons c_str pour faire la conversion.

#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;
}

Utilisation de la fonction std::to_chars pour convertir int en char*

Cette version est une fonction de pur style C++ ajoutée en C++17 et définie dans l’en-tête <charconv>. D’un point de vue positif, cette méthode offre des opérations sur des plages, ce qui pourrait être la solution la plus souple dans des scénarios spécifiques.

#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;
}
Auteur: 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

Article connexe - C++ Integer

Article connexe - C++ Char