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++ で入力が整数かどうかを確認する