3

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

    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”。存在显式转换(您是否缺少演员表?)

这没有任何意义。

呼叫者:

                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);
4

3 回答 3

7

错误不在于函数,而在于它的结果。

当你这样做时,input[i] ^ SN;你的结果是一个 int,你“不能将类型'int'隐式转换为'char'。

你可以像这样投射它:

(char)(input[i] ^ SN);
于 2012-07-19T18:11:36.440 回答
4

xor 运算符(以及其他运算符)返回一个整数结果。因此,一次转换为 char 就足够了。

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

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

output[i] = input[i];
output[i] ^= SN;
于 2012-07-19T18:14:09.497 回答
1

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

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

    output[i] = (char)((uint)input[i] ^ (uint)SN);
于 2012-07-19T18:11:16.780 回答