Danke !
Das Brett vorm Kopf ist weg.
Meine Formulierung war aber wohl auch etwas unverständlich. Der Hintergrund ist
schwer zu erklären.
Beispiel: 42 = Binär 00101010, suche das fünfte gesetzte Bit von rechts.
Sind ja nur 3 Bit gesetzt also vorne wieder anfangen.
Ergebnis wäre dann 8
Delphi-Quellcode:
Function Bitmask(Value: Word; Position: Integer; FromLeft: Boolean = true): Byte;
var i,len: Integer;
mask: Byte;
Bitcounter:byte;
begin
result:= 0;
Bitcounter:=0;
len:= (sizeof(value) * 8); // Anzahl der Bits
If FromLeft Then Position:= (len - position) + 1;
while Bitcounter<>Position do
Begin
for i:= 0 to len - 1 do
begin
mask:= (1 shl i);
If value and mask <> 0 Then Bitcounter:=Bitcounter+1;
if Bitcounter=Position then
Begin
result:=Mask;
break;
end;
end;
End;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
mask: Byte;
begin
mask := Bitmask(42,5,false);
Showmessage('Das '+inttostr(5)+'. Bit ist an Stelle ' + inttostr(mask)); // zeigt "Bitmask = 32"
end;
Das war so einer Dieser Tage wo man die Kiste einfach hätte abstellen sollen...
Noch mal Danke !
Calli