строка, не выводящая данные - PullRequest
0 голосов
/ 14 июля 2020

Я меняю местами биты целого числа, сначала помещая биты в строку. Почему cout из nu_string - пустая строка.

    uint32_t reverseBits(uint32_t n) {
    string nu_bits;
    for(int i=0; i<32;i++){
        nu_bits.push_back(n>>i)&1);
        cout<<nu_bits<<endl; //prints nothing
    }
    //cout<<stoi(nu_bits); Throwing an exception
    //terminate called after throwing an instance of 'std::invalid_argument'
    //what():  stoi
    return n;
}

Ответы [ 3 ]

2 голосов
/ 14 июля 2020

Взгляните на таблицу ASCII .

-----------------
Dec  |   CHAR VALUE
-----------------
0    |   NULL
1    |   SOH
...

Оба они не печатаемые символы. То, что вы, вероятно, хотели добавить, было «0» и «1». Значения 48 и 49 соответственно.

Итак, измените push_back() на следующий

    nu_bits.push_back( ((n>>i) & 1) + '0' );
   //OR
    nu_bits.push_back( ((n>>i) & 1) + 48 );
2 голосов
/ 14 июля 2020

push_back - для добавления символов в строку, если первый символ равен 0, то строка завершается NUL и поэтому будет пустой. Вероятно, вы хотели это сделать: nu_bits.push_back('0'+((n>>i)&1));

0 голосов
/ 15 июля 2020

Мне нравятся предыдущие ответы, но это скорее побочное примечание, вы можете использовать оператор += в строке, += совпадает с вызовом push_back():

std::string ss = "abcd";
std::cout << ss << "\n"; // outputs: abcd
ss += "e";
std::cout << ss << "\n"; // outputs: abcde

так что в вашем случае:

nu_bits += ('0'+((n>>i)&1));
...