关于c#:出于某种原因,不能将XOR运算符与两个char一起使用,有人知道为什么?

Cannot use the XOR operator with two char's for some reason, does anyone get why?

是否有一些正式的标准不允许一个人使用带有两个字符的C中的^或xor函数?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public char[] XORinput(char[] input, char SN)
    {
        int InputSize = input.Length;
        //initialize an output array
        char[] output = new char[InputSize];

        for (int i = 0; i < InputSize; i++)
        {

            output[i] = input[i] ^ SN;

        }


        return output;

    }

无论此代码给出此错误的原因是什么,错误1400都无法将类型"int"隐式转换为"char"。存在显式转换(是否缺少强制转换?)

这没有任何意义。

Caller:

1
2
3
4
5
6
7
8
9
                string num ="12345";
                char SN = Convert.ToChar(num);//serial number

                string sCommand = ("Hellow");

                char[] out = new char[sCommand.ToCharArray().Length];


                out = calculator.XORinput(sCommand.ToCharArray(), SN);


这个错误不是与函数有关,而是与函数的结果有关。

当您执行input[i] ^ SN;操作时,结果是一个int,您"无法将类型"int"隐式转换为"char"。

你可以这样投射:

1
(char)(input[i] ^ SN);


XOR运算符(连同其他运算符)返回整数结果。因此,一个单字符转换就足够了。

1
output[i] = (char)(input[i] ^ SN);

在这种情况下,您不必强制执行,但在您的情况下效率较低:

1
2
output[i] = input[i];
output[i] ^= SN;


如果你有一个字符,一个字符,你可以把它转换成一个整数,一个int。

然后可以使用^运算符对其执行XOR。您目前似乎没有使用该运算符,这可能是问题的根源。

1
    output[i] = (char)((uint)input[i] ^ (uint)SN);