为什么这个程序不打印出十六进制值?

时间:2012-11-04 18:59:57

标签: c++

自从我接触过C ++以来,已经很长一段时间了,我从来没有说过这种语言,所以请原谅我的无知。

我已经编写了以下小程序来搞乱XOR加密:

#include <iostream>
#include <iomanip>
#include "string.h"

using std::cout;
using std::endl;
using std::hex;
using std::string;

string cipher(string msg, char key);

int main(void)
{
    string msg = "Now is the winter of our discontent, made glorious summer by this sun of York.";
    char key = 's';  // ASCII 115

    string ctext = cipher(msg, key);

    cout << "Plaintext:  " << msg << endl;
    cout << "Ciphertext (hex):  ";
    for (int i = 0; i < ctext.size(); i++)
        cout << hex << ctext[i];

    return 0;
}

string cipher(string msg, char key)
/*
    Symmetric XOR cipher
*/
{
    for(int i = 0; i < msg.size(); i++)
        msg[i] ^= key;

    return msg;
}

此代码输出以下内容:

Plaintext:  Now is the winter of our discontent, made glorious summer by this sun of York.
Ciphertext (hex):  =SSSSSS_SSSS
SSSS*]

为什么我不能输出十六进制值?我做错了什么?

此外,任何一般性建议表示赞赏。

1 个答案:

答案 0 :(得分:2)

十六进制适用于整数。无论流中的基数是什么,都将字符串流式传输为字符。如果您希望以十六进制打印字符的ACSII代码,请使用

 cout << hex << static_cast<int>(ctext[i]);