C++ で ASCII を char に変換する方法

胡金庫 2023年10月12日
  1. C++ で代入演算子を使用して ASCII 値を char に変換する
  2. C++ で ASCII 値を char に変換するには sprintf() 関数を利用する
  3. ASCII 値を文字列に変換するには char() を用いる
C++ で ASCII を char に変換する方法

この記事では、C++ で ASCII 値を char に変換する方法について、複数の方法を紹介します。

C++ で代入演算子を使用して ASCII 値を char に変換する

ASCII エンコーディングは 128 個のユニークな文字をサポートしており、それぞれが対応する文字値にマップされています。C 言語では char 型を数値として実装していたので、対応する int 値を文字変数に代入することができます。例えば、int ベクトルから char ベクトルに値をプッシュし、std::copy アルゴリズムを使ってコンソールに出力すると、期待通りの ASCII 文字が表示されます。

char 型への代入は、int 値が ASCII コードに対応する場合にのみ機能することに注意してください。

#include <charconv>
#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> ascii_vals{97, 98, 99, 100, 101, 102, 103};
  vector<char> chars{};

  chars.reserve(ascii_vals.size());
  for (auto &n : ascii_vals) {
    chars.push_back(n);
  }
  copy(chars.begin(), chars.end(), std::ostream_iterator<char>(cout, "; "));

  return EXIT_SUCCESS;
}

出力:

a; b; c; d; e; f; g;

C++ で ASCII 値を char に変換するには sprintf() 関数を利用する

関数 sprintf は ASCII の値を文字に変換するもう一つの方法です。この解決策では、char 配列を宣言して、printf がコンソールに出力するまでの間、変換した値を繰り返し保存します。sprintf は文字の配列を第一引数にとります。次に、%c 形式指定子を指定します。これは文字値を表し、このパラメータは入力が変換される型を示します。最後に、3 番目のパラメータとして、ソース変数、すなわち ASCII 値を指定する必要があります。

#include <array>
#include <charconv>
#include <iostream>
#include <iterator>
#include <vector>

using std::array;
using std::copy;
using std::cout;
using std::endl;
using std::to_chars;
using std::vector;

int main() {
  vector<int> ascii_vals{97, 98, 99, 100, 101, 102, 103};

  array<char, 5> char_arr{};
  for (auto &n : ascii_vals) {
    sprintf(char_arr.data(), "%c", n);
    printf("%s; ", char_arr.data());
  }
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

a; b; c; d; e; f; g;

ASCII 値を文字列に変換するには char() を用いる

あるいは、char() キャストを用いて個々の ASCII 値を char 型に変換することもできます。以下の例は、ASCII 値を含む int ベクトルから直接コンソールに文字を出力する方法を示しています。

#include <charconv>
#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> ascii_vals{97, 98, 99, 100, 101, 102, 103};

  for (auto &n : ascii_vals) {
    cout << char(n) << endl;
  }

  return EXIT_SUCCESS;
}

出力:

a
b
c
d
e
f
g
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ Char