-1

文字列 (明らかに各 1 バイト) を、各文字のバイナリ コードを表す 1 と 0 の文字列に、最下位ビットが最初になるように変換したいと考えています。

たとえば、文字列「Ab3」は、「3」の「11001100」と連結された「b」の「01000110」と連結された「A」の「10000010」になります。すべての文字が正確に 8 ビットであることに注意してください。これは、文字が正しく保存されるためにすべての 8 ビットが必要なためです。これが true の場合、この例の文字列全体は「100000100100011011001100」になります。

各ビットを char にキャストできないため、ビットシフト演算子を使用してこれを行う方法は考えられませんが、それを行う方法が必要であることはわかっています。

注: このプロジェクトでビットセット (または任意の STL) を使用することは許可されていません。

助けてくれてありがとう!

4

4 に答える 4

3
stringstream ss; 

for(char c: std::string("Ab3")) 
     ss << std::bitset<8>(c);  

cout << ss.str();
于 2013-07-29T17:50:22.150 に答える
2

使用std::bitset:

#include <iostream>
#include <bitset>
#include <climits>

int main()
{
    std::string bits;
    std::string s = "abcd";

    for (std::string::iterator it = s.begin(); it != s.end(); it++) {
        std::bitset<CHAR_BIT> bset;
            bset |= (unsigned char)*it;
            bits += bset.to_string();
    }

    std::cout << bits << std::endl;
    return 0;
}

編集:愚かな制限に従って書き直された関連部分:

std::string bits;
std::string s = "abcd";

for (std::string::iterator it = s.begin(); it != s.end(); it++) {
    unsigned char c = *it;

    for (int i = CHAR_BIT - 1; i >= 0; i--)
        bits += '0' + ((c >> i) & 1);
}

std::cout << bits << std::endl;
于 2013-07-29T17:53:48.963 に答える