C++で Int を Char 配列に変換する方法

  1. 関数 std::printf を用いた int から char* への変換
  2. to_string()c_str() の組み合わせによる int から char* への変換メソッド
  3. intchar* に変換するための std::stringstream クラスメソッド
  4. 関数 std::to_chars を用いて int から char* に変換する方法

この記事では、intchar 配列(char*) に変換する方法について、さまざまな方法を用いて説明します。

以下の例では、変換結果をメモリバッファに格納し、検証のために std::printf で出力することを想定しています。

関数 std::printf を用いた int から char* への変換

まず、変換する変数 intchar バッファに格納するためのスペースを確保する必要があります。次の例では、整数データの最大長 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;
}

intchar* に変換するための 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 <iostream>
#include <charconv>

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

関連記事 - convert string lowercase

comments powered by Disqus