C++ で Int を Char 配列に変換する方法
- 
          
            関数 std::printfを用いたintからchar*への変換
- 
          
            to_string()とc_str()の組み合わせによるintからchar*への変換メソッド
- 
          
            intをchar*に変換するためのstd::stringstreamクラスメソッド
- 
          
            関数 std::to_charsを用いてintからchar*に変換する方法
 
この記事では、int を char 配列(char*) に変換する方法について、さまざまな方法を用いて説明します。
以下の例では、変換結果をメモリバッファに格納し、検証のために std::printf で出力することを想定しています。
関数 std::printf を用いた int から char* への変換
まず、変換する変数 int を char バッファに格納するためのスペースを確保する必要があります。次の例では、整数データの最大長 MAX_DIGITS を定義していることに注意してください。char バッファの長さを計算するために、sizeof(char) を追加しているのは、sprintf 関数が \0 バイトで終わる文字列を自動的に書き出すからです。このため、プログラマはこのバッファに十分なスペースを確保することを心がけるべきです。
#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;
}
出力:
num_char: 1234
ソースバッファとデスティネーションバッファが重複している状態で sprintf を呼び出すと (例:sprintf(buf, "%s some text to add", buf))、定義されていない動作をしてしまい、コンパイラによっては正しくない結果が得られる可能性があるので、お勧めできないことに注意してください。
to_string() と c_str() の組み合わせによる int から char* への変換メソッド
    
このバージョンでは、std::string クラスメソッドを利用して変換を行うので、先ほどの例のように sprintf を扱うよりもはるかに安全です。
#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;
}
int を char* に変換するための std::stringstream クラスメソッド
このメソッドは std::stringstream クラスを用いて実装されています。つまり、一時的な文字列ベースのストリームを作成して int データを格納し、str メソッドで文字列オブジェクトを返し、最後に c_str を呼び出して変換を行います。
#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;
}
関数 std::to_chars を用いて int から char* に変換する方法
このバージョンは、C++17 で追加された純粋な C++ スタイルの関数で、ヘッダ <charconv> で定義されています。プラス面では、このメソッドは範囲に対する操作を提供しており、特定のシナリオでは最も柔軟な解決策になるかもしれません。
#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;
}
関連記事 - C++ Integer
- C++ で 64 ビット整数を指定する
- C++ での 128 ビット整数の使用
- C++ の大整数
- C++ での INT_MAX および INT_MIN マクロ式
- C++ で数値が素数かどうかを調べる
- C++ で入力が整数かどうかを確認する
