在C#中对字符串进行异或

我最近开始玩C#,我试图理解为什么以下代码无法编译。 在错误评论的行上,我得到:

无法将类型’int’隐式转换为’char’。 显式转换退出(您是否错过了演员?)

我正在尝试使用两个字符串进行简单的XOR操作。

public string calcXor (string a, string b) { char[] charAArray = a.ToCharArray(); char[] charBArray = b.ToCharArray(); char[] result = new char[6]; int len = 0; // Set length to be the length of the shorter string if (a.Length > b.Length) len = b.Length - 1; else len = a.Length - 1; for (int i = 0; i < len; i++) { result[i] = charAArray[i] ^ charBArray[i]; // Error here } return new string (result); } 

你正在做2个字符的xor 。 这将为您执行隐式类型转换,因为没有数据丢失。 但是,从int转换回char将需要您提供显式转换。

您需要将int显式转换为result[i]char

 result[i] = (char) (charAArray[i] ^ charBArray[i]); 

如果您使用XOR-ing来隐藏数据,请查看下面的代码。 只要有必要,密钥将重复。 这可能是一个更短/更好的方法:

 public static string xorIt(string key, string input) { StringBuilder sb = new StringBuilder(); for(int i=0; i < input.Length; i++) sb.Append((char)(input[i] ^ key[(i % key.Length)])); String result = sb.ToString (); return result; } 

如果结果的值很重要,那么艾伦是正确的(接受的答案)。 如果您只是在寻找匹配并且不担心性能,请使用strcmp()或memcmp()作为替代方案。

在汇编程序中,通过XOR对自己初始化事物很常见,因为T循环较少。 如果我是暴力破解(哈希比较),那么这将是对strcmp或memcmp的改进,因为我真的不排序顺序,只是匹配/无匹配。

读者也应该意识到这可以调整。