C++ で文字列をバイナリシーケンスに変換する

胡金庫 2023年10月12日
  1. C++ で bitset<N> クラスを使用して文字列をバイナリシーケンスに変換する
  2. C++ でカスタム関数を使用して文字列をバイナリシーケンスに変換する
C++ で文字列をバイナリシーケンスに変換する

この記事では、C++ で文字列をバイナリシーケンスに変換する方法の複数の方法を示します。

C++ で bitset<N> クラスを使用して文字列をバイナリシーケンスに変換する

任意の文字列シーケンスが与えられると、その中の各文字を対応するバイナリ表現に変換します。ASCII 文字は整数に関連付けられており、char 値は int として扱うことができるため、bitset<N> クラスを使用して、各文字の固定バイナリシーケンスを初期化します。

bitset<N> のコンストラクターの 1つは、文字値からバイナリシーケンスを構築する方法を提供しますが、int が予期されている場合でも、char は整数値にキャストされることに注意してください。上記の解決策では、文字列全体を走査する必要があります。また、if ステートメントは、出力出力の形式を制御するためにループ内にのみ配置されることに注意してください。

#include <bitset>
#include <iostream>
#include <vector>

using std::bitset;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str = "Arbitrary string to be converted to binary sequence.";

  for (int i = 0; i < str.length(); ++i) {
    bitset<8> bs4(str[i]);
    cout << bs4 << " ";

    if (i % 6 == 0 && i != 0) cout << endl;
  }
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

01000001 01110010 01100010 01101001 01110100 01110010 01100001
01110010 01111001 00100000 01110011 01110100 01110010
01101001 01101110 01100111 00100000 01110100 01101111
00100000 01100010 01100101 00100000 01100011 01101111
01101110 01110110 01100101 01110010 01110100 01100101
01100100 00100000 01110100 01101111 00100000 01100010
01101001 01101110 01100001 01110010 01111001 00100000
01110011 01100101 01110001 01110101 01100101 01101110
01100011 01100101 00101110

C++ でカスタム関数を使用して文字列をバイナリシーケンスに変換する

または、int 値を取り、バイナリ表現を std::string オブジェクトとして返す関数を定義することもできます。このバージョンでは、指定された文字値を 2 で割って 0 に減らすまで、反復が必要です。ただし、前のソリューションは、一般的に書かれた数値で使用されるビッグエンディアン表現を出力し、次の例は、基になるマシンがそれらを格納するときにリトルエンディアンを出力します。

#include <bitset>
#include <iostream>
#include <vector>

using std::bitset;
using std::cout;
using std::endl;
using std::string;

string toBinary(int n) {
  string r;
  while (n != 0) {
    r += (n % 2 == 0 ? "0" : "1");
    n /= 2;
  }
  return r;
}

int main() {
  string str = "Arbitrary string to be converted to binary sequence.";

  for (int i = 0; i < str.length(); ++i) {
    cout << toBinary(str[i]) << " ";

    if (i % 6 == 0 && i != 0) cout << endl;
  }

  return EXIT_SUCCESS;
}

出力:

1000001 0100111 0100011 1001011 0010111 0100111 1000011
0100111 1001111 000001 1100111 0010111 0100111
1001011 0111011 1110011 000001 0010111 1111011
000001 0100011 1010011 000001 1100011 1111011
0111011 0110111 1010011 0100111 0010111 1010011
0010011 000001 0010111 1111011 000001 0100011
1001011 0111011 1000011 0100111 1001111 000001
1100111 1010011 1000111 1010111 1010011 0111011
1100011 1010011 011101
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ String

関連記事 - C++ Binary