| Autor |
Beitrag |
bucas
Hält's aus hier
Beiträge: 1
|
Verfasst: Mi 12.01.11 13:07
Hallo,
ich möchte die Bitdarstellung einer Integerzahl in einem String speichern? wie geht das? Moderiert von Narses: Topic aus Multimedia / Grafik verschoben am Mi 12.01.2011 um 14:14
|
|
Bergmann89
      
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)
|
Verfasst: Mi 12.01.11 13:37
Hey,
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); for i := 0 to 31 do begin if (int and 1) = 0 then result[32-i] := '0' else result[32-i] := '1'; int := int shr 1; end; end; |
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
spacemanspiff
      
Beiträge: 53
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
      
Beiträge: 390
Win XP
Delphi 2007 Prof., XE2, XE5
|
Verfasst: 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):
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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var zahl:integer; zeichenkette:string; intstr:integerstring;
begin zahl := 65535; zeichenkette := 'Der Zahlenwert ist '+integerstring(zahl).c+' !'; intstr.c := #255#255#0#0; zeichenkette := 'Der Wert war: '+inttostr(intstr.i)+' !'; end; |
_________________ Es gibt keine Probleme - nur Lösungen!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 13.01.11 07:28
Ich zitiere mal aus dem Omorphia-Source:
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.
|
|
|