Suche kleinen Delphi Codeschnippsel

01/23/2008 20:42 DesperadoStrike#1
Hay, ich brauch mal bei ner kleinen sache hilfe. und zwar würd ich gern nen codeschnippsel für eine consolen anwendung die dezimal in binär und umgekehrt berechnen kann. würd mich über hilfe sehr freuen

thx:D
01/24/2008 03:07 Ultima#2
Quote:
Originally Posted by DesperadoStrike View Post
Hay, ich brauch mal bei ner kleinen sache hilfe. und zwar würd ich gern nen codeschnippsel für eine consolen anwendung die dezimal in binär und umgekehrt berechnen kann. würd mich über hilfe sehr freuen

thx:D
nen code schnipsel hab ich zwar nicht zur hand aber mit 2 ideen kann ich dienen

Dez -> bin
der normale weg währe wohl die 2er potenzen zu testen und das dahingehend entsprechend zu zerlegen

aber einfacher ist es denke ich einfach eine schleife zu machen
in der von 1 beginnend mit dem shl operator die 1 immer weiter geschoben wird und dann immer die zu testende zahl mit der geshifteten zahl per und zu verknüpfen wenn das ergebnis ungleich 0 ist ist an der betreffenden stelle eine 1 wenn nicht eine 0

bin -> dez
ist einfacher man geht einfach daher und addiert die 2er potenzen wo die 1 gesetzt ist
101 z.B. ist 2^2+2^0=5
110 2^2+2^1=6
1101101=2^6+2^5+2^3+2^2+2^0=109
denke du verstehst wie es geht

ansonsten bastel ich später morgen mal den code zusammen wenn ich zeit finde
01/29/2008 17:25 neji#3
such dir eine aus

Code:
{1.}
{**********************************************************}
// Binary to Integer

function BinToInt(Value: string): Integer;
var
  i, iValueSize: Integer;
begin
  Result := 0;
  iValueSize := Length(Value);
  for i := iValueSize downto 1 do
    if Value[i] = '1' then Result := Result + (1 shl (iValueSize - i));
end;


// Integer to Binary

function IntToBin1(Value: Longint; Digits: Integer): string;
var
  i: Integer;
begin
  Result := '';
  for i := Digits downto 0 do
    if Value and (1 shl i) <> 0 then
      Result := Result + '1'
  else
    Result := Result + '0';
end;


function IntToBin2(d: Longint): string;
var
  x, p: Integer;
  bin: string;
begin
  bin := '';
  for x := 1 to 8 * SizeOf(d) do
  begin
    if Odd(d) then bin := '1' + bin
    else
      bin := '0' + bin;
    d := d shr 1;
  end;
  Delete(bin, 1, 8 * ((Pos('1', bin) - 1) div 8));
  Result := bin;
end;


{**********************************************************}
{2. by André Fritzsche}

unit BinConvert;

interface

  //Wandelt Bytewert (Value) zu Binärwert und trennt mit Splitter Hi- und Lo-Bits
function ToBin(Value: Byte; Splitter: Char): string; overload;

  //Wandelt Wordwert (Value) zu Binärwert und trennt mit Splitter Hi- und Lo-Byte
function ToBin(Value: Word; Splitter: Char): string; overload;

  //Wandelt Binärwert (String) zu Zahl (Cardinal)
function BinTo(Value: string): Cardinal;

implementation
{------------------------------------------------------------------------------}

function ToBin(Value: Byte; Splitter: Char): string;
var
  val, bit, intX: Byte;
begin
  val := Value;
  for intX := 0 to 7 do
  begin   //Alle 8 Bits durchlaufen
    bit := 48;    //48 (='0') zu bit
    val := val shr 1; //Value um 1 Bit nach rechts verschieben
    asm
   adc bit,0   //CarryFlag zu bit addieren
  end;
    if intX = 4 then Result := Splitter + Result;
    Result := Chr(bit) + Result;   //zu Result hinzufügen
  end;
end;
{------------------------------------------------------------------------------}

function ToBin(Value: Word; Splitter: Char): string;
begin
  Result := ToBin(Byte(Hi(Value)), Splitter) + Splitter + ToBin(Byte(Lo(Value)), Splitter);
end;
{------------------------------------------------------------------------------}

function BinTo(Value: string): Cardinal;
var
  intX, PosCnt: Byte;
begin
  Result := 0;
  PosCnt := 0;
  for intX := Length(Value) - 1 downto 0 do //zeichen von rechts durchlaufen
    case Value[intX + 1] of   //prüfen, ob 0 oder 1
      '0': Inc(PosCnt);  //bei 0 nur Pos-Zähler erhöhen
      '1':
        begin  //bei 1 Bit an Position einfügen
          Result := Result or (1 shl PosCnt);
          Inc(PosCnt); //und Zähler erhöhen
        end;
    end;
end;
{------------------------------------------------------------------------------}

end.