Converti stringa in sequenza binaria in C++

Jinku Hu 12 ottobre 2023
  1. Usa la classe bitset<N> per convertire una stringa in una sequenza binaria in C++
  2. Usa la funzione personalizzata per convertire una stringa in una sequenza binaria in C++
Converti stringa in sequenza binaria in C++

Questo articolo illustrerà più metodi su come convertire una stringa in una sequenza binaria in C++.

Usa la classe bitset<N> per convertire una stringa in una sequenza binaria in C++

Data la sequenza di stringhe arbitraria, convertiremo ogni carattere in essa contenuto nella corrispondente rappresentazione binaria. Poiché i caratteri ASCII sono associati ai numeri interi e il valore char può essere trattato come int, utilizzeremo la classe bitset<N> per inizializzare una sequenza binaria fissa per ogni carattere.

Notare che uno dei costruttori del bitset<N> fornisce un modo per costruire la sequenza binaria dai valori dei caratteri, ma indipendentemente dal char sarebbe stato cast al valore integrale anche se ci si aspettava int. La soluzione di cui sopra richiede l’attraversamento dell’intera stringa. Inoltre, nota che l’istruzione if viene inserita solo all’interno del bucle per controllare il formato dell’output stampato.

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

Produzione:

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

Usa la funzione personalizzata per convertire una stringa in una sequenza binaria in C++

In alternativa, possiamo definire una funzione che prenderà un valore int e restituirà la rappresentazione binaria come oggetto std::string. Questa versione richiede anche l’iterazione fino a quando il valore del carattere specificato viene ridotto a 0 dividendolo per due. Tuttavia, la soluzione precedente restituisce la rappresentazione big-endian come generalmente usiamo nei numeri scritti, e l’esempio seguente restituisce il little-endian mentre la macchina sottostante li memorizza.

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

Produzione:

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
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - C++ String

Articolo correlato - C++ Binary