Autor Beitrag
bucas
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 12.01.11 13:07 
Hallo,

ich möchte die Bitdarstellung einer Integerzahl in einem String speichern? wie geht das?


Moderiert von user profile iconNarses: Topic aus Multimedia / Grafik verschoben am Mi 12.01.2011 um 14:14
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mi 12.01.11 13:37 
Hey,

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function IntToBit(int: Integer): String;
var
  i: Integer;
begin
  SetLength(result, 32);     //Länge festlegen (32 da Integer = 32Bit);
  for i := 0 to 31 do begin  //alle 32 Bits durchzählen 
    if (int and 1) = 0 then  //wenn das letzte/niederwertigste Bit = 0 ist, dann
      result[32-i] := '0'    //0 in String schreiben
    else                     //sonst
      result[32-i] := '1';   //1 in String schreiben
    int := int shr 1;        //Int um 1 Bit nach rechts schieben
  end;
end;


MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
spacemanspiff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53
Erhaltene Danke: 1



BeitragVerfasst: Mi 12.01.11 13:39 
Also ich kenne nur die "normalen Wege zu Fuss"...

... bitweise Und-Verknüpfung und nachsehen, ob Wert größer 0... Ja: 1 zu String hinzufügen, 0 sonst

...oder...

... Wert immer um 1 nach rechts shiften und schauen ob Wert gerade oder ungerade ist... Gerade: 1 zu String hinzufügen, 0 sonst

so sollte das klappen... wenn man eine Programmiersprache kennt. Ob es vielleicht schon was unterstützendes in Delphi gibt, kann Dir vielleicht jemand anderes sagen.

Gruß,
Thomas
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 12.01.11 14:34 
ich glaub bei Adventgewinnspiel von vor 2 Jahren oder von letztem Jahr war eine Aufgabe dabei die sowas beinhaltete. Und soweit ich mich erinnere, hat Benny das damals ziemlich effizient mit LookUp-Tabellen gelöst. Seine Lösung muss hier irgendwo im Forum noch herumschwirren.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Do 13.01.11 07:11 
Hallo,

ich benutze meist den folgenden Weg, wenn es kein Problem darstellt, dass im Stringergebnis auch binäre Zeichen enthalten sind (Delphi-Strings kommen damit gut zurecht):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type
  integerstring=packed record
    case integer of
      0:(i:integer);
      1:(c:array[1..sizeof(integer)] of char);
  end;


Jetzt kann man über TypeCast aus jeder Zahl einen String machen (und auch wieder rückkonvertieren, falls nötig:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
  zahl:integer;
  zeichenkette:string;
  intstr:integerstring;

begin
  //Konvertieren von Integer nach String:
  zahl := 65535;
  zeichenkette := 'Der Zahlenwert ist '+integerstring(zahl).c+' !';
  
  //Konvertieren von String zu Zahl:
  intstr.c := #255#255#0#0;
  zeichenkette := 'Der Wert war: '+inttostr(intstr.i)+' !'//65535
end;

_________________
Es gibt keine Probleme - nur Lösungen!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 13.01.11 07:28 
Ich zitiere mal aus dem Omorphia-Source:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Function DWordToBinaryStr(AValue: DWORD): String;
Var
    B: PByte;
Begin
    Result := StringOfChar('0'32);
    B := @Byte(Result[32]);
    While AValue <> 0 Do
    Begin
        Inc(B^, AValue And 1);
        AValue := AValue Shr 1;
        Dec(B);
    End;
End;


Für die andere Richtung siehe in der Library.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.