Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 输出字符串包含奇怪的字符_C++ - Fatal编程技术网

C++ 输出字符串包含奇怪的字符

C++ 输出字符串包含奇怪的字符,c++,C++,此代码对字符串进行加密并输出加密后的字符串。但是,它会输出我不理解的字符,如“^XC[^CEA”^ 当我通过调试器运行应用程序时,输出字符串包含这些字符,\x2\x1a\x1\x1e\x1c\u R\x2 代码在这里 string key("fydfhjg74d2u1oj4134wq87uj97h31cx"); string encrypt(string msg, string key) { // Make sure the key is at least as long as the

此代码对字符串进行加密并输出加密后的字符串。但是,它会输出我不理解的字符,如“^XC[^CEA”^

当我通过调试器运行应用程序时,输出字符串包含这些字符,\x2\x1a\x1\x1e\x1c\u R\x2

代码在这里

string key("fydfhjg74d2u1oj4134wq87uj97h31cx");
string encrypt(string msg, string key)

{
    // Make sure the key is at least as long as the message
    string tmp(key);
    while (key.size() < msg.size())
        key += tmp;

    // And now for the encryption part
    for (string::size_type i = 0; i < msg.size(); ++i)
        msg[i] ^= key[i];
'   return msg;
}
string decrypt(string msg, std::string key)
{
    return encrypt(msg, key); // lol
}

int main()
{   

    ofstream appfile("C:\\Users\\123024594\\Desktop\\cas.txt", ios_base::app);
    string message;
    cout << "Input string to be ciphered: ";
    cin >> message;
    cin.get();
    cout << std::endl;
    appfile << "Ciphered string: " << encrypt(message, key);
}
字符串键(“fydfhjg74d2u1oj4134wq87uj97h31cx”);
字符串加密(字符串消息、字符串密钥)
{
//确保密钥至少与消息长度相同
字符串tmp(键);
while(key.size()消息;
cin.get();

cout因为您对消息和密钥字符串的各个字符进行了按位异或运算。由于按位运算符不一定产生可打印字符,因此您得到的是非打印字符。

//现在是加密部分
// And now for the encryption part
for (string::size_type i = 0; i < msg.size(); ++i)
    msg[i] ^= key[i];    // msg[i] ^ key[i]
对于(string::size_type i=0;i

字符的按位异或(ASCII值)可产生可打印字符和不可打印字符,具体取决于值。

使用按位异或。这可产生32以下的ASCII字符(32是空格,第一个可打印ASCII字符)。
如果您想要打印,您可以在Base64中对结果进行编码或更改加密,使结果不能低于32。

所以您的实际问题是…?问题是这些字符是什么