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:
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:
Inhalt Edit3: