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
@+
18 févr. 2017 à 08:52
peut être qu'avec >12, il voulait dire que jusqu'à 12 ça marche et après non?