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); |
这个错误不是与函数有关,而是与函数的结果有关。
当您执行
你可以这样投射:
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); |