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

胡金庫 2023年10月12日
  1. 関数 std::printf を用いた int から char* への変換
  2. to_string()c_str() の組み合わせによる int から char* への変換メソッド
  3. intchar* に変換するための std::stringstream クラスメソッド
  4. 関数 std::to_chars を用いて int から char* に変換する方法
C++ で 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 <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;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Integer

関連記事 - C++ Char