Convertire bin to decimal

Signaler
Messages postés
1
Date d'inscription
mercredi 15 février 2017
Statut
Membre
Dernière intervention
17 février 2017
-
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
-
Bonjour,
lorsque on convertir un chiffre binaire >12 par exemple 100010011011 cette fonction ne convertir pas????

4 réponses

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
Salut
C'est pas très clair !
<< 12 par exemple 100010011011>>
Quel rapport entre le "12" et le "100010011011"
Je suppose que c'est du binaire, auquel cas effectivement ça n'est pas 12
Donne un bout de code ou tu utilises cette soit disante fonction "bintidcimal"
Messages postés
14478
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 avril 2020
374
Bonjour dubois,

peut être qu'avec >12, il voulait dire que jusqu'à 12 ça marche et après non?
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
Salut Whismeril
Tu as raison c'est ce qu'il semble dire.
Par contre je ne connais pas de function Delphi qui fasse ce travail.
Il y a déjà eu le même sujet traité qui donne une fonction :
http://codes-sources.commentcamarche.net/forum/affich-907853-conversion-binaire-decimal
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
Salut,

c'est vrai que ce n'est pas un modèle de clarté !!! ^^

Mais en cherchant un peu sur Google (eh oui encore lui :p)
on trouve ceci:
 // http://stackoverflow.com/questions/21361627/converting-decimal-integer-to-binary-how-and-why-it-works-the-way-it-does
function IntToBin(p_nb_int: Uint64; p_nb_digits: Byte = 64): string;
begin
  SetLength(Result, p_nb_digits);
  while p_nb_digits > 0 do
  begin
    if odd(p_nb_int) then
      Result[p_nb_digits] := '1'
    else
      Result[p_nb_digits] := '0';
    p_nb_int := p_nb_int shr 1;
    dec(p_nb_digits);
  end;
end;


et son utilisation:
Edit1.Text := '2203';
  Label1.Caption := IntToBin(StrToInt(Edit1.Text), 12);
résultat: "100010011011"
Salut,
Je vais répondre sur...ben ici...
Voilà des fonctions...qui ressemble à celle proposée par Cirec...
uses Math,...
...
type
TSizeBits = (sb8Bits, sb16Bits, sb32Bits, sb64Bits);
...
function BinToInt64(S: string; ASizeBits: TSizeBits): Int64;
var
  I : Integer;
  J : Integer;
  FSizeBits: Byte;
begin
  Result := 0;
  J := 0;
  case ASizeBits of
    sb8Bits: FSizeBits := 8;
    sb16Bits: FSizeBits := 16;
    sb32Bits: FSizeBits := 32;
    sb64Bits: FSizeBits := 64;
  end;
  while Length(S) < FSizeBits do
    S := '0' + S;
  for I := Length(S) downto 2 do
  begin
    if Odd(Byte(S[I])) then
      Result := Result + Round(Power(2, J));
    Inc(J);
  end;
  if S[1] = '1' then
    Result := Result - Round(Power(2, FSizeBits) / 2);
end;

function Int64ToBin(Value: Int64; ASizeBits: TSizeBits): string;
var
  FSizeBits  : Byte;
begin
  Result := '';
  case ASizeBits of
    sb8Bits: FSizeBits := 8;
    sb16Bits: FSizeBits := 16;
    sb32Bits: FSizeBits := 32;
    sb64Bits: FSizeBits := 64;
  end;
  SetLength(Result, FSizeBits);
  while FSizeBits > 0 do
  begin
    if Odd(Value) then
      Result[FSizeBits] := '1'
    else
      Result[FSizeBits] := '0';
    Value := Value shr 1;
    Dec(FSizeBits);
  end;
end;

Pour l'utilisation :
Label1.Caption := IntToStr(BinToInt64('100010011011', sb16Bits));
Résultat BinToInt64 = 2203
Label1.Caption := Int64ToBin(2203, sb16Bits);
Résultat Int64ToBin= 0000100010011011
@+
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
Bien vu ;)