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.
Vous devez vous connecter pour publier un commentaire.
Salut,
La fonction suivante retourne le résultat de
hex()
qui retourne une chaîne de caractères.Vous devez utiliser le
^
opérateur sur des entiers.Je ne suis pas sûr si c'est le résultat que vous recherchez. Si vous voulez XOR de deux chaînes, il signifie que vous voulez XOR chaque caractère d'une chaîne de caractères avec le caractère de l'autre de la chaîne. Vous devez ensuite XOR
ord()
valeur de chaque char ou str1 avecord()
valeur de chaque char de str2.Ou en une seule ligne :
hex
retourne une chaîne de caractères, de sorte que vous êtes en essayant de xor de deux chaînes.Devrait corriger cet.
lors du retour de l'hexagone, comme dans
change_to_be_hex
, de convertir explicitement àint
. vous avez besoin de le faire tout au long de votre code pour ajouter quelque chose à cela - et donc, changerincrement_hex
à:4 ^ 5
? Que savez-vous? pas d'erreur. Non seulement est^
reconnu, il fait quelque chose d'assez similaire à ce que l'OP veut.