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
EndProcedure
Code : 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)
;------------------------------------