![]() |
AV nach ausführen von bitoperationen und funktionen
Hallo,
ich hab hier einen C Code vor mir liegen den ich auf Pascal portieren soll. Bisher bin ich eigentlich auch ganz gut damit klar gekommen. Jetzt hab ich aber eine Umrechnung von Rechten bei der immer eine AV springt wenn sie komplett abgelaufen ist. Kann mir jemand einen anhaltspunkt geben?
Code:
Danke schon im Voraus.
const
FLAG_MARKER = $C0; FLAG_A = $3F; FLAG_R = $20; FLAG_W = $10; FLAG_X = $08; FLAG_D = $04; FLAG_P = $02; FLAG_O = $01; implementation {$R *.dfm} function check(mask,right : Integer):boolean; begin if ((mask AND right) = right) then result := true else result :=false end; procedure TForm1.Button1Click(Sender: TObject); var wert:integer; m1,m2,m3,s1 : Integer; r1,r2,r3 : PChar; begin wert := -256; m1 := wert shr 24; m2 := wert shr 16; m3 := wert shr 8; // s1 := wert AND $FF; if( CHECK( m1, FLAG_MARKER ) AND CHECK( m2, FLAG_MARKER ) AND CHECK( m3, FLAG_MARKER ) ) then begin if( CHECK( m1, FLAG_A ) ) then strcat( r1, 'Alle' ) else begin if( CHECK( m1, FLAG_R ) ) then strcat( r1,'R' ); if( CHECK( m1, FLAG_W ) ) then strcat( r1, 'W' ); if( CHECK( m1, FLAG_X ) ) then strcat( r1, 'X' ); if( CHECK( m1, FLAG_D ) ) then strcat( r1, 'D' ); if( CHECK( m1, FLAG_P ) ) then strcat( r1, 'P' ); if( CHECK( m1, FLAG_O ) ) then strcat( r1, 'O' ); end; if( CHECK( m2, FLAG_A ) ) then strcat( r2, 'Alle' ) else begin if( CHECK( m2, FLAG_R ) ) then strcat( r2, 'R' ); if( CHECK( m2, FLAG_W ) ) then strcat( r2, 'W' ); if( CHECK( m2, FLAG_X ) ) then strcat( r2, 'X' ); if( CHECK( m2, FLAG_D ) ) then strcat( r2, 'D' ); if( CHECK( m2, FLAG_P ) ) then strcat( r2, 'P' ); if( CHECK( m2, FLAG_O ) ) then strcat( r2, 'O' ); end; if( CHECK( m3, FLAG_A ) ) then strcat( r3, 'Alle' ) else begin if( CHECK( m3, FLAG_R ) ) then strcat( r3, 'R' ); if( CHECK( m3, FLAG_W ) ) then strcat( r3, 'W' ); if( CHECK( m3, FLAG_X ) ) then strcat( r3, 'X' ); if( CHECK( m3, FLAG_D ) ) then strcat( r3, 'D' ); if( CHECK( m3, FLAG_P ) ) then strcat( r3, 'P' ); if( CHECK( m3, FLAG_O ) ) then strcat( r3, 'O' ); end; end; end; MfG Kasoft |
Re: AV nach ausführen von bitoperationen und funktionen
Zum Thema selber fällt mir grad nix ein, aber ein anderer Tip:
Das hier:
Code:
kann man schöner/einfacher/schneller schreiben:
function check(mask,right : Integer):boolean;
begin if ((mask AND right) = right) then result := true else result :=false end;
Delphi-Quellcode:
;)
function check(mask,right : Integer):boolean;
begin result := ((mask AND right) = right); end; |
Re: AV nach ausführen von bitoperationen und funktionen
ich glaube, du hast ein Problem mit dem strcat ... muss da nicht im Dest String genug platz sein ?
wieso kopierst die String nicht einfach wie Delphi Standard zusammen ?
Delphi-Quellcode:
r1 := '';
if( CHECK( m1, FLAG_A ) ) then r1 := 'Alle' else begin if( CHECK( m1, FLAG_R ) ) then r1 := r1 + 'R'; if( CHECK( m1, FLAG_W ) ) then r1 := r1 + 'W'; .... end; |
Re: AV nach ausführen von bitoperationen und funktionen
Danke Gruber daran lags. Ich hab Delphi-Like gemacht und siehe da es klappt.
Unser Webmaster sagt dazu: "Kaum macht man's richtig schon klappts..." Danke MfG Kasoft |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz