mode binaire

mode binaire - Delphi/Pascal - Programmation

Marsh Posté le 05-05-2006 à 13:19:35    

Bonjour,
 
je souhaite travailler un fichier en mode binaire.
 

Code :
  1. var
  2.   MonStream : TMemoryStream;
  3. begin
  4.   MonStream := TMemoryStream.Create;
  5. try
  6.     MonStream.LoadFromFile(FileName);


 
Lorsqu'on ouvre un fichier ( dans cet exemple un fichier texte) qui contient comme texte par exemple "abc", qu'y a t-il à ce moment dans la mémoire ? 61 62 63, ou  01100001 01100010 01100011 ?
Merci
 

Reply

Marsh Posté le 05-05-2006 à 13:19:35   

Reply

Marsh Posté le 05-05-2006 à 16:38:40    

coline a écrit :

Lorsqu'on ouvre un fichier ( dans cet exemple un fichier texte) qui contient comme texte par exemple "abc", qu'y a t-il à ce moment dans la mémoire ? 61 62 63, ou  01100001 01100010 01100011 ?
Merci

Ben... Les deux  [:airforceone] (sauf que c'est plutot 97,98,99(mais ça depend du codage. Ton texte peut etre en unicode)). Si tu le lit comme un fichier de byte plutot que comme un fichier de caractère, tu aura acces à la valeur numérique de tes octects.  
Apres, un nombre reste un nombre(je dirait mème:un octect reste un octect). Faut pas confondre valeur et représentation (qui est evidemment en binaire en memoire).
 
Ou peut etre que j'ai pas compris la question  [:airforceone]

Message cité 1 fois
Message édité par el zozo le 05-05-2006 à 16:43:30
Reply

Marsh Posté le 05-05-2006 à 17:38:00    

el zozo a écrit :

Ben... Les deux  [:airforceone] (sauf que c'est plutot 97,98,99(mais ça depend du codage. Ton texte peut etre en unicode)). Si tu le lit comme un fichier de byte plutot que comme un fichier de caractère, tu aura acces à la valeur numérique de tes octects.  
 
Ou peut etre que j'ai pas compris la question  [:airforceone]


 
Salut El Zozo,
 
si tu lis le fichier comme un fichier de byte ou de caractère, cela revient au même il me semble. Si on se déplace dans le stream, il se déplace de byte en byte. Je ne suis pas sur de ce que j'avance, je vais essayer de voir quelque chose.
 
Merci

Reply

Marsh Posté le 05-05-2006 à 17:41:25    

coline a écrit :

si tu lis le fichier comme un fichier de byte ou de caractère, cela revient au même il me semble.

Pas sûr. Si le fichier est encodé en UNICODE, je ne sais pas comment ça va réagir(perso, j'utilise les type "file" ou "textFile" plutot que les Stream).
Toujours est-il que je ne comprend pas tres bien ta question. Si tu sais comment accéder à la valeur numérique de chaque octect, que veut-tu savoir exactement?


Message édité par el zozo le 05-05-2006 à 17:42:46
Reply

Marsh Posté le 05-05-2006 à 18:17:44    

En fait, c'est pour faire un programme expérimental qui affiche un texte en hexa, puis en binaire, et j'ai une fonction qui affiche du binaire en hexa BinToHex. Alors si le contenu dans la mémoire est sous forme binaire, je gagnerais du temps.
 
Merci
 
@+

Reply

Marsh Posté le 05-05-2006 à 18:32:25    

Le contenu de la memoire est binaire. Mais  
1)Afficher 00110010 à l'ecran n'est pas plus rapide pour autant puis que tu affiche une chaine de 8 caracteres(donc 64 bits) n'ayant pas grand chose à voir avec les 8 bits d'origine.
2)Le processeur ne gere pas des bits, mais des octects et je ne connait pas de commande Delphi(ou mème assembleur) permetant de connaitre directement le nieme bit d'un octect(ou d'un mot, en général. Si quelqu'un à une fonction rapide, ça m'interesse).
 
Si tu veut transcrire un octect(ou plus généralement d'un nombre) de manière académique, la solution serait:
 

function ChaineBinaire(nombre:integer):string;
begin
  if nombre = 0 then ChaineBinaire := ''
  else
    if nombre mod 2 = 0 then ChaineBinaire := ChaineBinaire(Nombre div 2)+'0'
    else ChaineBinaire := ChaineBinaire(Nombre div 2)+'1';
end;


Message édité par el zozo le 05-05-2006 à 18:38:03
Reply

Marsh Posté le 05-05-2006 à 21:10:26    

Merci pour la précision.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed