Utiliser le code ascii en delphi [Résolu]

Messages postés
24
Date d'inscription
mercredi 29 octobre 2008
Dernière intervention
13 juillet 2011
- - Dernière réponse : codepvc
Messages postés
24
Date d'inscription
mercredi 29 octobre 2008
Dernière intervention
13 juillet 2011
- 30 oct. 2008 à 13:31
Salut à toutes et à tous,
j'ai un problème et je souhaite que vous pouvez m'aider
comment utiliser le tableau du code ascii en Delphi pour chiffrer un message


C’est-à-dire tapez un texte dans un composant Memo et afficher le texte chiffré utilisant le code Ascii dans un autre Memo,


Merci d’avance.   
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
3869
Date d'inscription
samedi 22 décembre 2007
Dernière intervention
3 juin 2016
3
Merci
Caractère => ASCII => Binaire

Ben, ç'est pas très difficile alors ... suffit de trouver une fonction DecToBin, y'en a pas mal sur le site je crois ...

Regarde :

function DecToBin(Val: Word): String;
var
i:integer;
reste:array[1..16]of integer;
begin
for i:=1 to 16 do
reste[i]:=0;
i:=1;
while Val <> 0 do
begin
reste[i]:=Val mod 2;//le reste de la div(0 ou 1)
Val := Val div 2;//le nombre résulant de la div par 2 (128/2=64)
inc(i);//permet le passage à l'indice suivant du tableau RESTE
end;
for i:=16 downto 1 do
Result:=Result+inttostr(Reste[i]);
end;
end.


procedure AsciiToBinProcess(Input, Output: TStrings);
Var
I: Integer;
begin
Output.Clear;
for I := 1 to Length(Input.Text) do
Output.Text := Output.Text + DecToBin(ord(Input.Text[I]));
end;

Voilà !

Ah il te le fait en 16 bit ... (0-65536)
Si tu veux en 8 bit (peut-être plus convenable pour l'ASCII), tu changes l'étendue du tableau de valeurs Reste à 8, et tu changes les amplitudes des boucles à 8 au lieu de 16. Voilà !

(fonction DecToBin empruntée à MatSky - http://www.delphifr.com/codes/DECIMAL-VERS-BINAIRE_11875.aspx - , légèrement remodelée pour être convenable ici ^^

Et pour le décryptage c'est ENCORE PLUS SIMPLE !
Tu fais une boucle qui chope tous les 8 (ou 16, ça dépend du nombre de bits avec lesquels tu convertis en binaire) caractères du mémo binaire, et tu convertis cette valeur binaire en décimal. Crois-moi, c'est plus facile, j'en avais fais une mais je l'ai perdue ... ^^' mais il y en a sur le site.

Bonne chance ;)

Cordialement, Bacterius !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Bacterius
Messages postés
3869
Date d'inscription
samedi 22 décembre 2007
Dernière intervention
3 juin 2016
0
Merci
Petit coucou rapide le temps de répondre à ce message.

ord(char) te donne le code ascii de ce caractère (exemple : ord('A') donne 65, et ord('a') te donnera 97 ...).
Voici un site avec un tableau ascii (oui les anglais partagent le même alphabet que nous :p ), je m'en sers souvent : www.asciitable.com

Voilà, le reste devrait vite se faire ... une petite boucle sur chaque caractère du mémo ...

Allez tiens :

procedure AsciiProcess(Input, Output: TStrings);
Var
I: Integer;
begin
Output.Clear;
for I := 0 to Length(Input.Text) do
Output.Text := Output.Text + IntToStr(ord(Input.Text[I]));
end;

Voilà ... en prime il te chiffrera avec un 0 devant ...
Je te laisse voir pour le déchiffrage.

Pour appeller : AsciiProcess(MonMemo1.Lines, MonMemo2.Lines);

Et voilà !!

Cordialement, Bacterius !
Commenter la réponse de Bacterius
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
bonsoir,

tu as testé ?
ça plante sur :
IntToStr(ord(Input.Text[I]))

cantador
Commenter la réponse de cs_cantador
Messages postés
3869
Date d'inscription
samedi 22 décembre 2007
Dernière intervention
3 juin 2016
0
Merci
Oui j'ai testé et ça n'a pas planté ... en revanche ça a mis un 0 devant chaque code ascii ...
Mais je pense que c'est dû à la tentative d'accès à une variable objet ... il faudrait passer Input et Output en variable abstraite ... :

procedure AsciiProcess(Input, Output: TStrings);
Var
I: Integer;
InEx, OutEx: TStringList;
begin
InEx := TStringList.Create;
OutEx := TStringList.Create;
InEx.Text := Input.Text;
for I := 0 to Length(InEx.Text) do
OutEx.Text := OutEx.Text + IntToStr(ord(InEx.Text[I]));
Output.Text := OutEx.Text;
OutEx.Free;
InEx.Free;
end;

(Mais j'ai pas testé celle-là)

Cordialement, Bacterius !
Commenter la réponse de Bacterius
Messages postés
3869
Date d'inscription
samedi 22 décembre 2007
Dernière intervention
3 juin 2016
0
Merci
En fait non ... élément 0 inaccessible ...
Donc :

procedure AsciiProcess(Input, Output: TStrings);
Var
I: Integer;
begin
Output.Clear;
for I := 1 to Length(Input.Text) do
Output.Text := Output.Text + IntToStr(ord(Input.Text[I]));
end;

Voilà ! (petite erreur d'inattention ^^)

Cordialement, Bacterius !
Commenter la réponse de Bacterius
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
ça marche ! incroyable !

cantador
Commenter la réponse de cs_cantador
Messages postés
24
Date d'inscription
mercredi 29 octobre 2008
Dernière intervention
13 juillet 2011
0
Merci
Merci de me répondre mais peut être que j'ai pas précisé mon question, je veut utilisé le code Ascii pour trouver le message en binaire
donc comment aller du code Ascii au binaire
Merci encore une deuxième fois Bacterius et cantador
Commenter la réponse de codepvc
Messages postés
24
Date d'inscription
mercredi 29 octobre 2008
Dernière intervention
13 juillet 2011
0
Merci
Bonjour
Merci Bacterius, c'est vraiment la bonne réponce, Merci de m'aider 
Commenter la réponse de codepvc
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
si c'est pour faire un cryptage...
la protection n'est pas du tout efficace..

cantador
Commenter la réponse de cs_cantador
Messages postés
3869
Date d'inscription
samedi 22 décembre 2007
Dernière intervention
3 juin 2016
0
Merci
C'est sûr ... ^^ Il faudrait endurcir le cryptage !

Cordialement, Bacterius !
Commenter la réponse de Bacterius
Messages postés
24
Date d'inscription
mercredi 29 octobre 2008
Dernière intervention
13 juillet 2011
0
Merci
je sais, mais c'est une partie seulement non pas le cryptosystème lui même
Commenter la réponse de codepvc

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.