Вместо 0 и 1 высвечиваются непонятные символы
В output(ниже) в строчке encode я получаю непонятные символы. Хотя по идее должен быть результат вычисления 0110 ^ 1111. В чем проблема?
#include <bits/stdc++.h>
unsigned foo(unsigned l2, unsigned start_state2, std::string& key2) {
uint32_t state = 0b1111111111111111111111111111111;
uint32_t start_state{ state };
uint32_t period{ 0 };
uint32_t bit2 { 0 };
do
{
bit2 = ((state >> 31) ^ (state >> 30) ^ (state >> 29) ^ (state >> 25) ^ state);
key2[period] = bit2;
//std::cout << std::bitset<1>(key2[period]) << " ";
state = (state >> 1) | (bit2 << 31);
std::cout << std::bitset<32>(state) << std::endl;
period++;
} while ((period != 15) && (start_state != state));
std::cout << "Period: " << period << std::endl;
}
std::string encode2(std::string data, std::string& key2) {
std::string output = data;
for(int i=0; i < data.size(); ++i) {
output[i] = data[i] ^ (key2[i]) /*+ '0'*/;
}
return output;
}
int main() {
unsigned bit2;
unsigned start_state2;
unsigned l2 = start_state2;
std::string key2 = " ";
foo(l2, start_state2, key2);
std::string data2 = "1111";
std::cout << "data: " << data2 << std::endl;
std::cout << "key: ";
for(int i=0; i < data2.size(); ++i) {
key2[i] += '0';
std::cout << std::bitset<1>(key2[i]);
}
std::cout << std::endl;
std::string Encode2 = encode2(data2, key2);
std::string decode2 = encode2(Encode2, key2);
std::cout << "encode: " << Encode2 << std::endl;
std::cout << "decode: " << decode2 << std::endl;
}
output:
00111111111111111111111111111111
10011111111111111111111111111111
11001111111111111111111111111111
01100111111111111111111111111111
00110011111111111111111111111111
10011001111111111111111111111111
01001100111111111111111111111111
00100110011111111111111111111111
10010011001111111111111111111111
11001001100111111111111111111111
11100100110011111111111111111111
01110010011001111111111111111111
00111001001100111111111111111111
00011100100110011111111111111111
10001110010011001111111111111111
Period: 15
data: 1111
key: 0110
encode: ├ ╓¤
decode: 1111