在 C++ 中將字串轉換為二進位制序列

Jinku Hu 2023年1月30日 2021年4月29日
  1. 使用 bitset<N> 類將字串轉換為 C++ 中的二進位制序列
  2. 在 C++ 中使用自定義函式將字串轉換為二進位制序列
在 C++ 中將字串轉換為二進位制序列

本文將演示如何在 C++ 中將字串轉換為二進位制序列的多種方法。

使用 bitset<N> 類將字串轉換為 C++ 中的二進位制序列

給定任意字串序列,我們會將其中的每個字元轉換為相應的二進位制表示形式。由於 ASCII 字元與整數相關聯,並且 char 值可以視為 int,因此我們將利用 bitset<N> 類來初始化每個字元的固定二進位制序列。

請注意,bitset<N> 的建構函式之一提供了一種從字元值構造二進位制序列的方法,但是不管 char 是否已被強制轉換為整數值,即使期望使用 int 也不例外。上述解決方案需要遍歷整個字串。另外,請注意,if 語句僅放置在迴圈內部以控制列印輸出的格式。

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

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

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。請注意,以前的解決方案輸出的是我們通常以書面形式使用的 big-endian 表示形式,下面的示例在底層機器儲存它們時輸出 little-endian 表示形式。

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

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

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
Author: 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

相關文章 - C++ String

相關文章 - C++ Binary