2

ここで素朴な疑問。XOR 演算子 (^) に問題があります。整数をうまく XOR して、正しい結果を得ることができます。ただし、2 つの文字を XOR すると、何も返されません。

int main() {
    char a = 'a';
    char b = 'b';
    char c;

    c = a^b;
    cout << c << endl;
}

何も起こりません。出力なし。ここで何が間違っていますか。これを使用して、特定のキーで文字列を XOR 暗号化しようとしていますが、この操作に問題があります。ASCII 値を取得して対応する char に変換できると思いますが、このツールはプレーン テキストだけでなくファイルの暗号化にも使用されるため、絶対に避けたいと思います。

4

4 に答える 4

5

'a' ^ 'b'( 0x61 ^ 0x62)3は、印刷できない文字ASCII であるため、ETX印刷されません。

于 2012-09-19T23:58:58.767 に答える
2

の結果'a' ^ 'b'は、印刷できない文字、つまり'\3'です。

于 2012-09-19T23:54:56.210 に答える
2

これを試して。

#include <iostream>
#include <iomanip>

int main() {
    char a = 'a';
    char b = 'b';
    char c;

    c = a^b;
    std::cout << std::hex << static_cast<int>(c) << std::endl;
}
于 2012-09-20T00:05:35.753 に答える
1

std::ostream::operator<<(および)std::coutは、フォーマットさstd::ostreamれたテキストを出力します。を渡すと、文字をフォーマットして出力しようとします(ASCIIを考えてください)。が印刷可能な文字でない場合は、 (明らかな理由で) 印刷されません。フォーマットされた整数を出力する場合は、キャストする必要があります。charchar

char a = 'a'; // 'a' == 0x61
char b = 'b'; // 'b' == 0x62
char c = a ^ b; // 0x61 ^ 0x62 == 0x03
std::cout << static_cast<int>(c) << std::endl;

価値があるのは、フォーマットされていない出力機能を使用すると、フォーマットされてstd::ostream::writeいない文字が出力されることです。ただし、印刷できない文字を書き出そうとすると「機能」しますが、コンソールには表示されないため注意してください (これも印刷できない文字であるため)。

于 2012-09-20T01:48:55.183 に答える