Appliqué a partir d'un caractere ?
Appliqué a partir d'un autre string de meme longueur ???
Code : Tout sélectionner
ProcedureDLL.s StrXor(a.s, b.s)
  If Len(a) <> Len(b)
    ProcedureReturn ""
  EndIf
  Result.s = ""
  For x = 1 To Len(a)
    Result = Result + Chr((Asc(Mid(a, x, 1)) ! Asc(Mid(b, x, 1))))
  Next x
  ProcedureReturn Result
EndProcedure
Debug StrXor("azerty", "qsdfgh")Imagine :Dorian a écrit :Merci mais en terminal d'electronique je sais ce qu'est une XOr ^^
En faite j'ai pas tout capter ton histoire de sur toute la chaîne ??? Mon code fait un Xor du code ascii des 2 caractères d'une même "colonne". Mais j'aimerais que explique un peu plus ce que tu veux car là je nage ^^
Code : Tout sélectionner
Structure Bytes
  b.b[0]
EndStructure
s1.s = "12345"
s2.s = "abcde"
*buffer1.Bytes = AllocateMemory(Len(s1))
PokeS(*buffer1,s1)
*buffer2.Bytes = AllocateMemory(Len(s2))
PokeS(*buffer2,s2)
If Len(s1) > Len(s2)
  fin = Len(s2)
Else
  fin = Len(s1)
EndIf
For i = 0 To fin - 1
  *buffer1\b[i] = *buffer1\b[i] ! *buffer2\b[i]
Next
Debug PeekS(*buffer1)
Debug PeekS(*buffer2)
Code : Tout sélectionner
ProcedureDLL.s StrXor(a.s, b.s)
  Protected *a.Byte=@a, *b.Byte=@b
  While *a\b And *b\b : *a\b!*b\b : *a+1 : *b+1 : Wend 
  ProcedureReturn a
EndProcedureCode : Tout sélectionner
Structure Bytes 
  b.b[0] 
EndStructure 
ProcedureDLL.s StrXor0(a.s, b.s) ; dorian (modifié)
  Protected result.s
  Protected lenA.l = Len(a)
  Protected lenB.l = Len(b)
  If lenA > lenB
    For i=1 To lenB : result + Chr((Asc(Mid(a, i, 1)) ! Asc(Mid(b, i, 1)))) : Next
  Else
    For i=1 To lenA : result + Chr((Asc(Mid(a, i, 1)) ! Asc(Mid(b, i, 1)))) : Next
  EndIf 
  ProcedureReturn result 
EndProcedure 
ProcedureDLL.s StrXor1(a.s, b.s) ; dr dri (modifié)
  Protected *a.Bytes = @a, lenA.l = Len(a)
  Protected *b.Bytes = @b, lenB.l = Len(b)
  If lenA > lenB
    For i=0 To lenB-1 : *a\b[i] ! *b\b[i] : Next
  Else 
    For i=0 To lenA-1 : *a\b[i] ! *b\b[i] : Next
  EndIf 
  ProcedureReturn a
EndProcedure
ProcedureDLL.s StrXor2(a.s, b.s) ; flype
  Protected *a.Byte = @a ; Pointeur sur le premier caractère de a.s
  Protected *b.Byte = @b ; Pointeur sur le premier caractère de b.s
  While *a\b And *b\b    ; Tant que *a et *b sont différents de Chr(0)
    *a\b ! *b\b          ; XOrisation du caractère en cours dans a.s
    *a+1 : *b+1          ; Incrémente les pointeurs pour obtenir le caractère suivant
  Wend                   ; Fin puisque *a ou *b est égal à Chr(0)
  ProcedureReturn a      ; Retourne la chaîne XOrisée
EndProcedure
;------------------------------------
n.l = 500000
a.s = "dorian,dri,flype"
b.s = "0123456789ABCDEF"
;------------------------------------
t0 = ElapsedMilliseconds()
For i = 0 To n
  r0.s = StrXor0(a, b)
Next
t0 = ElapsedMilliseconds() - t0
;------------------------------------
t1 = ElapsedMilliseconds()
For i = 0 To n
  r1.s = StrXor1(a, b)
Next
t1 = ElapsedMilliseconds() - t1
;------------------------------------
t2 = ElapsedMilliseconds()
For i = 0 To n
  r2.s = StrXor2(a, b)
Next
t2 = ElapsedMilliseconds() - t2
;------------------------------------
res.s
res + a + " XOr " + b + #LF$ + #LF$
res + r0 + " : " + Str(t0) + "ms" + #LF$
res + r1 + " : " + Str(t1) + "ms" + #LF$
res + r2 + " : " + Str(t2) + "ms" + #LF$
MessageRequester("Résultat", res)
;------------------------------------