Cordes XOR-ing en C #

J’ai récemment commencé à jouer avec C # et j’essaie de comprendre pourquoi le code suivant ne comstack pas. Sur la ligne avec le commentaire d’erreur, j’obtiens:

Impossible de convertir implicitement le type ‘int’ en ‘char’. Une conversion explicite se termine (il vous manque un casting?)

J’essaie de faire une opération XOR simple avec deux chaînes.

public ssortingng calcXor (ssortingng a, ssortingng 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 ssortingng 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); } 

Vous faites un xor sur 2 personnages. Cela fera une conversion de type implicite en int pour vous car il n’y a pas de perte de données. Cependant, pour reconvertir de int en char , vous devrez fournir une conversion explicite.

Vous devez convertir explicitement votre int en un caractère pour le result[i] :

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

Si vous utilisez XOR-ing pour masquer des données, consultez le code ci-dessous. La clé sera répétée aussi longtemps que nécessaire. C’est peut-être une approche plus courte / meilleure:

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

Si la valeur du résultat est importante, alors Allan est correct (réponse acceptée). Si vous cherchez simplement une correspondance et que les performances ne vous inquiètent pas, utilisez strcmp () ou memcmp () comme alternative.

En assembleur, il est courant d’initialiser les choses par un XOR contre eux-mêmes car les cycles T sont moins nombreux. Si je forçais brute (hash à comparer), alors ce serait une amélioration par rapport à strcmp ou memcmp car je ne sortinge pas vraiment l’ordre, mais correspond / nomatch.

Les lecteurs doivent également savoir que cela peut être modifié.