[.NET VC++] ou exclusif entre deux String
Bonjour, je cherche à crypter un String (ou exclusif avec une autre String).
A une fonction je passe la String à crypter, cette fonction ferait les opérations suivantes :
1- elle scrute les caractères un par un (du début à la fin)
2- manipule CE caractère (ou exclusif avec un autre caractère)
3- le remplace par le résultat ci-dessus
4- renvoi la chaîne à la fin de la scrutation
Par exemple :
Code:
1 2 3 4 5 6 7 8 9
|
private: String* CrypteDecrypte(String* pstring_)
{
String* pstring_Retour = pstring_;
for( int i=0 ; i<pstring_Retour->Length ; i++ )
pstring_Retour[i] = pstring_Retour[i] (ou exclusif) '#'
return pstring_Retour;
} |
Je me heurte à ça :
1- je ne pense par pouvoir manipuler cacartère par caractère dans la String,
2- transformer la String initiale en tableau de caractère
2-1- effectuer la succession de ou exclusifs
2-2- re-transformer le tableau de caractères obtenu en String
2-3- renvoyer cette String
Existe-t-il plus pratique ?
Merci
le compilo n'aime pas mes [] alors
Bon, j'ai codé la fonction comme suit :
Code:
1 2 3 4 5 6
|
private: void CrypteDecrypte(String& pstring_)
{
for( int i=0 ; i<pstring_.Length ; i++ )
pstring_[i] = pstring_[i] ^ '#';
} |
Et l'erreur de compilation est :
Code:
1 2 3
|
error C2676: '[' : 'System::String' binaire ne définit pas cet opérateur ou une conversion vers un type acceptable pour l'opérateur prédéfini
error C2676: '[' : 'System::String' binaire ne définit pas cet opérateur ou une conversion vers un type acceptable pour l'opérateur prédéfini |
J'en déduis qu'il n'apprécie pas les [] ?
ça y est : StringBuilder de System::Text
ça y est, dans le livre VisualC++.NET étape par étape Microsotf Press page 42 :
- une String n'est pas modifiable APRES son initialisation
- utiliser une StringBuilder de System::Text pour des chaînes devant être souvent modifiées
Alors voila ce que j'ai fait ET qui fonctionne à merveille c'est à dire comme je le veux :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
private: String* CrypteDecrypte(String* pstring_)
{
StringBuilder* pstringbuilder_Retour = new StringBuilder(pstring_);
StringBuilder* pstring_Key = new StringBuilder(S"ma clef de cryptage");
for( int i=0 ; i<pstringbuilder_Retour->Length ; i++ )
pstringbuilder_Retour->set_Chars(i, pstringbuilder_Retour->get_Chars(i) ^ pstring_Key->get_Chars(i%(pstring_Key->Length)));
return pstringbuilder_Retour->ToString();
} |
avec bien évidemment :
Code:
1 2
|
using namespace System::Text; |