C++ で Int を ASCII 文字に変換する方法

胡金庫 2023年10月12日
  1. Int を ASCII 文字に変換するために Int から Char への割り当てを使用する
  2. Int を ASCII 文字に変換するには sprintf() 関数を用いる
C++ で Int を ASCII 文字に変換する方法

この記事では、int を ASCII 文字に変換する方法のいくつかの方法を C++ で解説します。

Int を ASCII 文字に変換するために Int から Char への割り当てを使用する

ASCII 文字エンコーディングは 7 ビット形式で指定されています。したがって、128 個のユニークな文字があり、それぞれが 0 から 127 までの対応する数値に対応しています。

C 言語では char 型を数値として実装していたので、char 型変数に int 変数を代入して、それを対応する ASCII 文字として扱うことができます。例えば、int ベクトルから char ベクトルに直接値をプッシュし、std::copy メソッドを使って出力すると、期待通りの ASCII 文字が表示されます。

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

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

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

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

  std::copy(numbers.begin(), numbers.end(),
            std::ostream_iterator<int>(cout, "; "));

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

  return EXIT_SUCCESS;
}

出力:

97; 98; 99; 100; 101; 102; 103;
a; b; c; d; e; f; g;

あるいは、int 型の値を直接 ASCII 文字として出力するには、printf 関数を用います。以下の表に示すように、printf は対応する型の引数の書式指定子を取ります。

指定子 説明
% リテラル文字 % を出力します (この型はフラグ、幅、精度、長さのフィールドを受け付けません)。
d, i int を符号付き整数として使用します。%d%i は出力では同義ですが、入力で scanf と一緒に使用すると異なります (%i を使用すると、0x の前に 16 進数、0 の前に 8 進数として解釈されます)。
u 10 進数の符号なし整数を表示します。
f, F 通常の(固定小数点)表記では double です。fF の違いは、無限数や NaN の文字列をどのように表示します。かだけです ( f は inf, infinity, nan、F は INF, INFINITY, NAN)。
e, E 標準形式の二重値(d.ddde±dd)。E の変換では、指数を導入するために(e ではなく)E という文字を使用します。
g, G 倍は通常または指数表記のいずれか、その大きさに応じて適切な方を使用します。
x, X 符号なし整数を 16 進数で表します。
o 符号なし整数(8 進数)です。
s ヌル文字で終端する文字列。
c char (文字)。
p void* (void へのポインタ)を実装定義の形式で提供します。
a, A a は小文字を使用し、A は大文字を使用します。
n 何も表示されませんが、これまでに正常に書き込まれた文字数を整数のポインタパラメータに書き込みます。
#include <array>
#include <charconv>
#include <iostream>
#include <iterator>
#include <vector>

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

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

  for (const auto &number : numbers) {
    printf("%c; ", number);
  }
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

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

Int を ASCII 文字に変換するには sprintf() 関数を用いる

関数 sprintfint の値を文字に変換するもう一つの方法です。変換された値を保持するためには、char 変数を宣言しなければならません。この変数は sprintf の第 1 引数として渡され、第 3 引数には処理する数値を指定します。最後に、printf と同様にフォーマット指定子のいずれかを指定しなければならません。

#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> numbers{97, 98, 99, 100, 101, 102, 103};

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

  return EXIT_SUCCESS;
}
a; b; c; d; e; f; g;
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ Integer