Comment XOR de deux chaînes de caractères en Python

H, je suis en train de XOR de deux chaînes (qui devrait devenir hex première) en Python.
Je connais une façon de travailler:

def xor_two_str(str1, str2):
    return hex(int(str1,16) ^ int(str2,16))

Mais j'ai essayé qqch comme ceci:

def change_to_be_hex(str):
    return hex(int(str,base=16))
def xor_two_str(str1,str2):
    a = change_to_be_hex(str1)
    b = change_to_be_hex(str2)
    return hex(a ^ b)
print xor_two_str("12ef","abcd")

Ce sera le retour de TypeError: ^ ne doit pas être utilisé entre str, str.
Je ne sais pas pourquoi.

Et aussi cette fonction ne fonctionne pas:

bcd = change_to_be_hex("12ef")
def increment_hex(hex_n):
   return hex_n + 1
result = increment_hex(bcd)
print result

Le message d'erreur est : TypeError: ne peut pas concaténer 'str' et de 'int' objets
J'ai l'impression que c'est étrange:(

Merci!

  • il signifie octet opérateur xor, pas la puissance de l'opérateur
  • Euh... Oui, c'est
  • je suis corrigé!
  • Si vous savez comment XOR des nombres représentés comme hex chaînes et vous savez que vous ne pouvez pas utiliser ^ sur les cordes. Quelle est votre question, alors?
  • OP, ne voulez-vous pas XOR la valeur numérique de chaque personnage dans chaîne1 par la valeur du caractère à la même position dans chaîne2? (modulo la longueur à enrouler autour de la dans le cas où ils ne sont pas de la même longueur). Pourquoi s'embêter avec les hex de conversion?
  • Je suis d'accord avec jDo, voir ma réponse :), Vous devez utiliser ord() sur chaque char à xor entre eux.
  • Merci les gars, j'ai pensé hex() retournera un hex en python. Je ne savais pas qu'elle retourne une chaîne de caractères. Désolé, les nouvelles de Python.

InformationsquelleAutor Lalaphoon | 2016-03-27