Bonjour, j'utilise c++builder et j'aimerai faire un fonction qui permet de transformer un texte en hex , comment faire ?
merci d'avance!
Version imprimable
Bonjour, j'utilise c++builder et j'aimerai faire un fonction qui permet de transformer un texte en hex , comment faire ?
merci d'avance!
Bonjour,
Tu as la fonction IntToHex qui affiche sous forme hexa.
Exemple:
A essayer...Code:
1
2
3 for(int i=1:i< Memo->Text.Length();i++) Memo1->Text+=IntToHex(Memo->Text[i],2);
L'accès à la propriété Text est un peu lent, alors avec une boucle !
L'utilisation de += est aussi dangereux car contourne le Setter de la property Text et donc ne provoque pas les appels au API Windows qui gère le TMemo
Au final, += ne fait absolument rien (cela modifie le retour du Getter de Text mais pas Text)
Imaginons que Text est une String, alors Text s'allonge à chaque +=, existe-t-il un risque de provoquer une boucle infini puis Length() évoluerait de façon exponentiel
Pour du Ansi Char, il existe une fonction toute prête BinToHex que l'on peut encapsuler ainsi
Code:
1
2
3
4
5
6
7
8
9 AnsiString AnsiTextToHexaText(const AnsiString Text) { AnsiString Hexa; Hexa.SetLength(Text.Length() * 2); // Allocation mémoire BinToHex(Text.c_str(), Hexa.c_str(), Text.Length()); // remplissage return Hexa; }
Code:
1
2
3
4
5
6
7
8
9
10
11
12 AnsiString WideTextToHexaText(const UnicodeString Text) { AnsiString Hexa; // TBytes TextBytes = Text.BytesOf(); // Conversion selon le TEncoding par défaut en Tableau d'Octet, risque de perte de l'Unicode vers Ansi TBytes TextBytes = WideBytesOf(Text); // Conversion UTF16 en Tableau d'Octet, un caractère = 2 octets ou 4 octets selon la page de langue Hexa.SetLength(TextBytes.Length * 2); // Allocation mémoire BinToHex(&TextBytes[0], Hexa.c_str(), TextBytes.Length); // remplissage return Hexa; }
Je te propose aussi HexToStream et StreamToHex écrites en Delphi