begin process at 2010 02 10 05:50:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths

 > CONVERTISSEUR BINAIRE

CONVERTISSEUR BINAIRE


 Information sur la source

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths Classé sous :convertisseur, binaire Niveau :Initié Date de création :02/01/2007 Vu / téléchargé :9 842 / 639

Auteur : abdousoft

Ecrire un message privé
Site perso
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

 Description

salut

Voila un convertisseur binaire "Binaire----> decimal  &  octet  & Héxadecimal"
j'ai developpé cette Convertisseur binaire a l'aide d'un autre codes sources  
mais je sais tres bien le contenu de cette derniere.
et puisque je suis entrain d'apprendre l'assembleur (ASM).
j'espere bien que mon convertisseur vous plais.

Merci @+



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture POPUPMENU STYLE XP SANS COMPOSANT
Source avec Zip LA LISTE DES ERREURS DU BDE
Source avec Zip DEPLACER UNE FENETRE A L'AIDE DES TOUCHES DU CLAVIER
Source avec Zip EXEMPLE GENERAL D'UTILISATION DU SGBD PARADOX
Source avec Zip EXEMPLE DE LOGIN AVEC UTILISATEUR ET MOT DE PASSE

 Sources de la même categorie

Source avec Zip Source avec une capture CONVERTISSEUR D'UN NOMBRE DÉCIMAL EN BINAIRE ET HEXADECIMAL par ludokk
Source avec Zip Source avec une capture PREMIER OU PAS? par ludokk
Source avec Zip Source avec une capture CONJECTURE DU CARRÉ DES FACTEURS par Bacterius
Source avec Zip Source avec une capture GÉNÉRATEUR DE NOMBRES PSEUDO-ALÉATOIRES par Bacterius
Source avec Zip Source avec une capture ALGORITHME DE HASH LEA par Bacterius

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CONVERTISSEUR D'UN NOMBRE DÉCIMAL EN BINAIRE ET HEXADECIMAL par ludokk
Source avec Zip CONVERTISSEUR BINAIRE EN INTEL HEX par basssem81
Source avec Zip DHEX, OUTILS D'AIDE POUR LE DEVELOPPEMENT, TABLE ASCII / DEC... par f0xi
Source avec Zip INITIATION AU FICHIER DE SAUVEGARDE BINAIRE. par Caribensila
Source avec Zip Source avec une capture CONVERTISSEUR IMAGE TO ASCII (ÉDITION RÉVISÉE) par Forman

Commentaires et avis

Commentaire de Renfield le 02/01/2007 12:50:16 administrateur CS

Delphi ne possederait-il pas nativement de telles fonctions de convertion ?

Commentaire de Jean_Jean le 02/01/2007 13:14:23

Bj Abdousoft,

Ton code est utile et réussi.
RenField, Math de delphi comprend des fonctions de conversions, mais pas celle-ci.

Par contre, Maths de jlmcom est une source de plusieurs fonctions utiles dans ce sens me semble t-il:
http://www.delphifr.com/codes/PETITE-LIBRAIRIE-MATHS-VERSION_25181.aspx

Bonne Prog 2007

Commentaire de Francky23012301 le 02/01/2007 13:55:01

Salut

Je vais etre dur : c'est codé comme un pied.

Des IF Else à l'infini qui aurait pu et du etre optimisés par un CASE.

Result:=B1+B2+B3+B4+B5+B6+B7+B8+B9+B10+B11+B12+B13+B14+B15 : Heureusement que tu en as pas 500 : Les StringList ne servent à rien ?? ;).

abdousoft : par le passé tes codes étaient corrects mais depuis quelques temps tu prends CS pour ton vide grenier.

L'intéret est en plus discutable

Commentaire de WhiteHippo le 02/01/2007 18:40:07

Bonsoir

Je ne vois pas non plus l'intérêt d'un tel code, du moins écrit ainsi...

Avec un peu de réflexion, et si on a quelques connaissances, on arrive facilement à écrire une fonction de conversion vers n'importe laquelle des bases ( base 2 = binaire, base 8 = octal, base 10 = décimal, base 16 = héxadécimal, etc... )

function CardinalToBase( Valeur : Cardinal ; base : Byte ) : string ;
const
  CHIFFRES : array [0..15] of char = '0123456789ABCDEF';
var
  i, Reste : Cardinal ;
begin
  if ( base < 2 ) or ( base > 16 ) then base := 10 ;
  Result := '' ;
  while ( Valeur <> 0 ) do
  begin
    Reste  := Valeur mod base ;
    Valeur := Valeur div base ;
    Result := CHIFFRES[ Reste ] + Result ;
  end;
end;

Et la fonction de conversion du binaire, me direz vous :

function BinToCardinal ( ChaineBinaire : string ) : Cardinal ;
var
  i, L, poids : Cardinal ;
begin
  L := Length (ChaineBinaire) ;
  if ( L>32 ) then Exit ;
  Poids := 1 ;
  Result := 0 ;
  for i := L downto 1 do
  begin
    Result := Result + ( Ord(ChaineBinaire[i]) - Ord('0') ) * Poids ;
    Poids := Poids * 2 ;
  end ;
end ;

Il ne reste plus qu'à appeler le tout :

  Base8  := CardinalToBase( BinToCardinal ( '11000011010100000' ),  8 ) ; // Base8 = '303240'
  Base10 := CardinalToBase( BinToCardinal ( '11000011010100000' ), 10 ) ; // Base10 = '100000'
  Base16 := CardinalToBase( BinToCardinal ( '11000011010100000' ), 16 ) ; // Base16 = '186A0'

  Base2  := CardinalToBase( BinToCardinal ( '11000011010100000' ),  2 ) ; // idem ;)
  Base5  := CardinalToBase( BinToCardinal ( '11000011010100000' ),  5 ) ; // Base5 = '11200000'

N.B. On aurait également pu écrire une fonction BaseToCardinal, traité les nombres signés, etc...

Cordialement.  

Commentaire de Jean_Jean le 02/01/2007 19:11:02

Bj à tous :-)

Je suis d'accord avec Francky et White Hippo. Je n'avais pas regardé le code en détail et l'avait simplement exécuté.

Abdousoft va nous la refaire j'espère!

Cordialement
Jean_Jean

Commentaire de N_M_B le 03/01/2007 02:53:11

et voila comment on se fait remonter les bretelles sur CS lol

Commentaire de f0xi le 03/01/2007 03:06:51 administrateur CS



houlala ...


pour convertir n'importe quoi en chaine binaire :

procedure AllToBinStr(const Buffer; const bSize : integer; var OutBinStr : string);
var S,N : integer;
    pR  : PChar;
    pB  : ^byte;
const
    DTB : array[0..1] of char = ('0','1');
begin
  S := bSize shl 3;
  SetLength(OutBinStr, S);
  pR := PChar(OutBinStr);
  pB := @Buffer;
  inc(pB,bSize-1);
  for N := 0 to bSize-1 do begin
      pR[0] := char(((pB^ shr 7) and $01) or $30);
      pR[1] := char(((pB^ shr 6) and $01) or $30);
      pR[2] := char(((pB^ shr 5) and $01) or $30);
      pR[3] := char(((pB^ shr 4) and $01) or $30);
      pR[4] := char(((pB^ shr 3) and $01) or $30);
      pR[5] := char(((pB^ shr 2) and $01) or $30);
      pR[6] := char(((pB^ shr 1) and $01) or $30);
      pR[7] := char((pB^ and $01) or $30);
      inc(pR,8);
      dec(pB);
  end;
end;

a utiliser comme suis :

pour integer, byte, word, int64, array of integer, array of byte, etc
AllToBinStr(Value, SizeOf({TypeValue}), OutStr);

pour chaine de caracteres :

AllToBinStr(PChar(Value), Length(Value), OutStr);



pour convertir n'importe quoi en hexadecimal :

procedure AllToHexStr(const Buffer; const bSize : integer; var OutHexStr : string);
var S,N : integer;
    pR : PChar;
    pB : ^byte;
const
    DIG : array[0..$F] of char = '0123456789ABCDEF';
begin
  S := bSize shl 1;
  SetLength(OutHexStr, S);
  pR := PChar(OutHexStr);
  pB := @Buffer;
  inc(pB,bSize-1);
  for N := 0 to bSize-1 do begin
      pR[0] := DIG[pB^ shr 4];
      pR[1] := DIG[pB^ and $F];
      dec(pB);
      inc(pR,2);
  end;
end;

a utiliser comme AllToBinStr...


BinStr > entier :

function BinStrToInt(const BinStr : string) : int64;
var N,B : integer;
begin
  result := 0;
  B := 1;
  For N := Length(BinStr) downto 1 do begin
      if BinStr[N] = '1' then
         inc(result,B);
      B := B or B;
  end;
end;

HexStr > entier :

function HexStrToDec(const HexStr : PChar; const hLen : integer) : int64;
var N   : integer;
    B   : byte;
    pB  : ^byte;
begin
  B  := 0;
  pB := @HexStr^;
  inc(pB,hLen-1);
  result := 0;
  for N := hLen-1 downto 0 do begin
      case pB^ of
        $30..$39 : B := pB^-$30;
        $41..$46 : B := pB^-$37;
        $61..$66 : B := pB^-$57;
        else
          exit;
      end;
      result := result + (B shl (N shl 2));
      Dec(pB);
  end;
end;

Commentaire de abdousoft le 03/01/2007 10:11:27

Salut
Merci pour vos commentaire!!!
mais vraiment je comprend rien?
@+

Commentaire de f0xi le 03/01/2007 14:18:33 administrateur CS

salut, qu'est ce qui te pose soucis ?

Commentaire de f0xi le 03/01/2007 14:41:03 administrateur CS

procedure AllToBinStr(const Buffer; const bSize : integer; var OutBinStr : string);

{ Buffer est une variable non typée, on peu donc y placer n'importe qu'elle donnée, chiffre, texte, structure ect...
bSize est la taille en octet de Buffer, elle s'obtient grace a SizeOf() ou Length(), OutBinStr est la chaine de sortie du resultat de la convertion.

var S,N : integer;
    pR  : PChar;
    pB  : ^byte;
{ S permet de calculer la taille finale de OutBinStr (bSize*8)
  N sert a la boucle for,
  pR est un pointeur sur Char pour OutBinStr (equivalent a un array of char a peu prés)
  pB est un pointeur sur Byte (octet) pour Buffer
}
begin
  { on calcul la taille finale de OutBinStr
    shl 3 = *8 }
  S := bSize shl 3;
  { on definit la taille de OutBinStr }
  SetLength(OutBinStr, S);
  { on pointe pR sur OutBinStr }
  pR := PChar(OutBinStr);
  { on pointe pB sur Buffer }
  pB := @Buffer;
  { on se positionne a la fin du buffer car on lit de droite a gauche }
  inc(pB,bSize-1);
  
  { on entre dans la boucle 0..bSize-1 }
  for N := 0 to bSize-1 do begin
      { ici on recupere chaque bit de l'octet en cours (pB^) }
      pR[0] := char(((pB^ shr 7) and $01) or $30); {10000000 bit 8}
      pR[1] := char(((pB^ shr 6) and $01) or $30); {01000000 bit 7}
      pR[2] := char(((pB^ shr 5) and $01) or $30); {00100000 bit 6}
      pR[3] := char(((pB^ shr 4) and $01) or $30); {00010000 bit 5}
      pR[4] := char(((pB^ shr 3) and $01) or $30); { etc }
      pR[5] := char(((pB^ shr 2) and $01) or $30);
      pR[6] := char(((pB^ shr 1) and $01) or $30);
      pR[7] := char((pB^ and $01) or $30);
      { shr decale les bits vers la droite, and $01 applique un masque sur le bit si il est egale a 1 on retrouve 1 si est a zero on retrouve 0, or $30 ajoute 48 a la valeur 0 ou 1 pour retrouver le caractere ascii 0 ou 1 ($30 et $31), enfin Char(...) convertir ce chiffre en caractere }
      { on decale le pointeur pR de 8 octet vers la droite }
      inc(pR,8);
      { on decale le pointeur pB de 1 octet vers la gauche }
      dec(pB);
  end;
end;




procedure AllToHexStr(const Buffer; const bSize : integer; var OutHexStr : string);
{ voir AllToBinStr pour l'explication de l'entete de procedure }

var S,N : integer;
    pR : PChar;
    pB : ^byte;
{ idem }

const
    DIG : array[0..$F] of char = '0123456789ABCDEF';
{ DIG permet de recuperer directement le caractere selon la valeur du mots de 4 bits (0..F) qu'on lui transmet }

begin
  { ici le rapport de S est de *2 (shl 1) pour la taille finale de OutHexStr }
  S := bSize shl 1;

  { pas besoin d'expliquer la suite }
  SetLength(OutHexStr, S);
  pR := PChar(OutHexStr);
  pB := @Buffer;
  inc(pB,bSize-1);

  for N := 0 to bSize-1 do begin
      { pB^ shr 4 permet de recuperer les 4 bits de poids fort de l'octet : F0 }
      pR[0] := DIG[pB^ shr 4];
      { pB^ and $F permet de recuperer les 4 bits de poids faible de l'octet : 0F }
      pR[1] := DIG[pB^ and $F];

      { decalage des pointeur }    
      inc(pR,2);
      dec(pB);
  end;
end;

pour comprendre un peu :

1 octet = 1 char = 1 byte = 2 caracteres hexa = 8 caracteres binaire


function BinStrToInt(const BinStr : string) : int64;
{ BinStr est une chaine representant un mots binaire d'une taille maximale de 64 bits !}

var N,B : integer;
begin
  { initialisation }
  result := 0;
  B := 1; { le premier est a 1 }
  For N := Length(BinStr) downto 1 do begin
      { si le caractere a la position N est egal a 1 }
      if BinStr[N] = '1' then
         { alors on additionne Result avec la valeur courrante de B }
         result := result + B;
      { a chaque passage on additionne B avec lui meme }
      B := B or B;
      { B = 1 }
      { B = 1 + 1 = 2  }
      { B = 2 + 2 = 4  }
      { B = 4 + 4 = 8  }
      { B = 8 + 8 = 16 }
      { B = 16+16 = 32 }
      { etc }
      { on pourrait egalement faire B = B shl 1 a chaque passage mais or est plus rapide que shl }
  end;
end;


voila ...

Commentaire de abdousoft le 03/01/2007 14:46:58

salut

Merci pour les commentaires!

@+

Commentaire de Caribensila le 03/01/2007 16:10:56

S'il n'existait pas, il faudrait l'inventer, ce fOxi! :))
Expert... et en plus sympa.

Merci

Commentaire de Jean_Jean le 04/01/2007 09:57:11

Oui plus que sympha avec les débutants!
Toujours un plaisir de vous lire!
Quand même Abdousoft, tu aurais pu demander sur le forum avant de publier!
Il y a de bons tutaux en pdf pour apprendre la programmation!
Tu fais par exemple "télécharger cours delphi" ou algorithmique"" sur google.
bon apprentissage!

Commentaire de abdousoft le 04/01/2007 10:27:04

salut

Mais je suis pas un debutant Jean_Jean  
et je sais quesque je fait!!!!!!!!!!!!!


@+

Commentaire de Jean_Jean le 04/01/2007 12:31:54

Nous sommes tous des débutants et je m'y inclus et pourtant j'ai été un professionnel à la pointe à une époque ...

Alors tu vois, il n'y a pas de mal dans ce que je dis.

Moi, je suis toujours heureux d'apprendre de l'autre. Je disais ça pour t'aider à ma façon. Google est un outil sympa aussi avec un peu d'habitude.

La vie est belle!

Commentaire de f0xi le 04/01/2007 13:38:12 administrateur CS

ouai tu as debutant et debutant ... comme le dit jean_jean, on est tous plus ou moins debutant mais avec un certains niveau technique derriere.

on peu trés bien faire des programmes aboutis, lourd, techniquement pauvre, mais qui marche ... mais ça fait pas de nous un "pur pro" de delphi.

meme moi je me considere pas comme un pro ou un expert mais plus comme un amateur avertis avec un bon niveau technique.
aprés, y'a toujours pleins de truc qu'on ne sait pas faire et sur lequels on rame car ... on y comprend que dalle.

aprés c'est comme tout, y'a une difference entre la technique et l'experience tout comme la theorie et la pratique.

mais comme disaient mes profs de math, le resultat importe peu, c'est comment on arrive a ce resultat qui est important.

meme si le resultat est bon, quand on applique une methode pourrie le resultat est pourrie egalement. c'est comme en cuisine, si tu fait des crepe en dosant n'importe comment en mettant les oeuf avec la coquille et en vidant la bouteille de grand-margnier dedans, le tout dans un gros mixer ... y'a des chance pour que tes crepes soit foireuses et que les gens qui les mangent finissent aux urgences...


Commentaire de Debiars le 05/01/2007 09:58:16

Après la belle tirade de l'ami Foxi et pour faire dans la simplicité, je te communique la réécriture que je me suis permis de faire de ton prog à titre d'exemple. Le résultat est le même mais l'économie de moyens est appréciable.

Tout d'abord, j'ai supprimé les boutons qui ne servaient à rien. On peut très bien cliquer sur un TEdit. J'en ai d'ailleurs rajouté un pour porter le nombre de bits à 16, ce qui correspond à un "word".

On ne crée que la procédure OnClick de Ed0 et on fait pointer les évènements OnClick de Ed1 à 15 sur cette même proc.

Pour le reste, voir les commentaires...

var
  PrincipFrm: TPrincipFrm;
  tbval : array[0..15] of word;
  num : word;

implementation

{$R *.dfm}

procedure TPrincipFrm.FormCreate(Sender: TObject);
var  i : byte;
begin                // calcul des valeurs des bits
  tbval[0] := 1;
  for i := 1 to 15 do
    tbval[i] := tbval[i-1] * 2;
end;

//-----------------------------------------------------

function TPrincipFrm.Bit(n : byte) : TEdit;   // référencer un TEdit à l'aide
begin                                         // de son numéro
  Result := FindComponent('Ed'+IntToStr(n)) as TEdit;
end;

// on n'utilise l'évenement OnClick que de Ed0 et on l'affecte aux Ed de 1 à 15
// la propriété Tag de chaque Ed est affectée du numéro de l'Ed pour pouvoir
// l'identifier.
procedure TPrincipFrm.Ed0Click(Sender: TObject);
var  i : byte;
     c0,c1 : byte;
begin
  i := (Sender as TEdit).Tag;                    // identifier le TEdit cliqué
  if Bit(i).Text = '0' then Bit(i).Text := '1'   // inverser la valeur du bit
  else Bit(i).Text := '0';
  num := 0;
  for i := 0 to 15 do                       // calculer la valeur en décimal
    if Bit(i).Text = '1' then num := num + tbval[i];
  DecEdit.text:=IntToStr(num);              // et l'afficher
  HexEdit.TexT := IntToHex(num,4);          // afficher la valeur en hexadécimal
  c0 := Lo(num);             // extrait l'octet de poids faible
  c1 := Hi(num);             // extrait l'octet de poids fort
  if c1 > 31 then OctEdit.Text := Chr(c1)
  else OctEdit.Text := ' ';
  if c0 > 31 then OctEdit.Text := OctEdit.Text+Chr(c0)
  else OctEdit.Text := OctEdit.Text+' ';
end;

procedure TPrincipFrm.SpeedButton1Click(Sender: TObject);
begin
  Close;
end;

procedure TPrincipFrm.Timer1Timer(Sender: TObject);
begin
  DTLabel.Caption := DateTimeTostr(Now);
end;

end.

On peut p'têt fair plus concis, si...

Commentaire de abdousoft le 11/01/2007 10:44:01

Salut
mr Debiars , je te dit que j'ai debuter avec ce simple programme, parceque je suis en cours d'apprendre le ASM c'est tout, et pour moi j'ai fait un grand travail.
Merci pour tes commentaires. c'est tres gentille a la prt de vous et de l'ami Foxi.

c'est vrai nous somme tous des debutnts.
Merci @+

Commentaire de Debiars le 11/01/2007 16:31:07

Excuse-moi, Abdousoft, je n'ai nullement coulu dénigrer ton travail, mais simplement et titre d'exemple, te montrer qu'on pouvait arriver au même résultat en travaillant beaucoup moins, ce qui est le propre d'un bon programmeur.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

rendre une chaine de caractere en binaire [ par tarik ] comment rendre une chaine de caractere en binaire ?je vais l'utiliser pour realiser un programme de cryptage(hachage)etape1 : transformer en binaireet CONVERTISSEUR VB -> DELPHI [ par Antoine ] Salut !Quelqu'un peut-il me dire où je peux télécharger un convertisseur permettant de traduire le langage Visual Basic en delphi ? Merci beaucoup ! Convertisseur euro/franc ; franc/euro [ par Zangdar ] sur http://zangdar.free.fr/site/programme/convertisseur.v1.2.exe @++http://www.zangdar.fr.stPs : Ca serait vachement sympas de cliquer sur mabannière Ouverture, lecture d'un fichier en mode binaire [ par SMoG ] YoOOooOOoooooo la dedans :)bon voila, j'aimerais ouvrir et lire un fichier en mode binaire ligne par ligne, mais j'ai trouvé que des méthodes qui lise opérateurs binaire?? [ par costello ] Je cherche si il existe un opérateur Delphi correspondant à l'opérateur ' &lt;&lt; ' ou ' &gt;&gt; ' en c++ainsi que l'opérateur logique | .merci convertion binaire décimal en delphi [ par xav34130 ] bjr j'aimerai savoir si il existe un commande pour convertir un nombre binaire en décimal sous delphi 5,sinon si qelqun pouvait maider pour y arriver Ecriture dans un fichier binaire [ par ixpichu ] Salut!!g un petit problème, j'aimerai écrire une structure dans un fichier binaire, je voudrais savoir: -comment je dois déclarer ma structure qui convertisseur [ par OlivierAfpaRoubaix ] Bonjour , je cherche un source c#,un add pour visual studio ou delphi pour convertir un code delphi vers c#, et inversement . Merci d'avance.Olivier. Ecriture d'un fichier image dans un bichier binaire. [ par altefcat ] j'utilise un fichier binaire pour enregistrer des enregistrement (nom,resume,remarque,etc)dans un fichier. je suhaite ajouter en plus pour chaque enre Rechercher une chaine binaire dans un fichier binaire. [ par SiZiOUS ] Salut à tous,Voila, j'ai un problème. Je voudrai rechercher une chaîne dans un fichier binaire (pas du texte).Seulement, j'ai pas trouvé de fonction q


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales