Thema: Delphi Bits auslesen?

Einzelnen Beitrag anzeigen

Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Bits auslesen?

  Alt 21. Nov 2008, 23:47
So, nochmal
Hab nämlich ein seltsames Problem. Ich hab nun eine Procedur GetBits, der übergebe ich das Byte X und das array, in das sie die Bits schreiben soll (als integer)...

Delphi-Quellcode:
procedure GetBits(X:Byte;Target:array of integer);
var i:integer;
begin
  for i:=0 to 7 do
    if(X and (1 shl i))=(1 shl i) then Target[7-i]:=1
    else Target[7-i]:=0;
end;
Dann ruf ich das so auf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tmp:Array[0..7]of integer;
    i:integer;
begin
  GetBits(ord(Edit1.Text[1]),tmp);
  Edit2.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: ';
  for i:=0 to 7 do Edit2.Text:=Edit2.Text+inttostr(tmp[i]);
end;
Das gibt aber das hier:
Code:
ord: 97 | Bit: 43214167772161242548211761055642072234358324


Wenn ich mal nach jeder einzelnen Integer leerschläge einfüge, sieht das so aus:
Code:
ord: 97 | Bit: 43 2 14 16777216 1242548 2117610556 4207223 4358324
Abgesehen davon, dass die 6. Zahl an der oberen Grenze von Integer kratzt, ist das natürlich völlig normal und genau das, was ich wollte

Nun, zum Test hab ich dann mal das gemacht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tmp:Array[0..7]of integer;
    i:integer;
begin
  for i:=0 to 7 do
    if(ord(Edit1.Text[1]) and (1 shl i))=(1 shl i) then tmp[7-i]:=1
    else tmp[7-i]:=0;
  Edit2.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: ';
  for i:=0 to 7 do Edit2.Text:=Edit2.Text+inttostr(tmp[i]);
end;
Und siehe da, es kommt das Richtige raus:
Code:
ord: 97 | Bit: 01100001
Kann mir das jemand erklären? Der Code zum Auslesen der Bits ist ja absolut identisch...

MfG Z4ppy

€dit: So, nochmal Direktvergleich, dann wirds nämlich noch seltsamer
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tmp,tmp2:Array[0..7]of integer;
    i:integer;
begin
  for i:=0 to 7 do
    if(ord(Edit1.Text[1]) and (1 shl i))=(1 shl i) then tmp[7-i]:=1
    else tmp[7-i]:=0;
  Edit2.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: ';
  for i:=0 to 7 do Edit2.Text:=Edit2.Text+inttostr(tmp[i]);

  GetBits(ord(Edit1.Text[1]),tmp2);
  Edit3.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: ';
  for i:=0 to 7 do Edit3.Text:=Edit3.Text+inttostr(tmp2[i]);
end;
Inhalt Edit2:
Code:
ord: 97 | Bit: 01100001
Inhalt Edit3:
Code:
ord: 97 | Bit: 00000000
  Mit Zitat antworten Zitat