![]() |
BitmaskToByte -> ByteToBitmask
ich habe in der DP folgenden Code gefunden um eine Bitmask als Byte darzustellen zB. 11000001 -> 1+2+128 -> 131
Delphi-Quellcode:
siehe DP:
function BitmaskToByte(AValue:TBitmask):byte;
var i:integer; begin result := 0; // Rückgabewert auf 0 setzten. WICHTIG. Weglassen dieser Zeile kann zu faulen Ergebnisen führen. for i := 0 to 7 do if avalue.bits[i] then //Wenn dieser Wert der Bitmaske auf "1" steht, muss das Ergebnis um Inc(Result, 1 shl i); //2 hoch der Position in der Bitmaske incrementiert werden. end; ![]() nun möchte ich die "Umkehrfunktion" haben und habe dazu folgenden Code erstellt:
Delphi-Quellcode:
kann jemand den aufgeführten Code optimieren oder hat eine bessere Vorgehensweise?
function ByteToBitmask(AValue:Byte):TBitmask;
var i,t:integer; begin t := 1; for i := 0 to 7 do Inc( t, 1 SHL i ); for i := 8 downto 0 do begin if AValue>=t then begin Result.Bits[i] := True; AValue := AValue - t; end else Result.Bits[i] := False; t := t div 2; end; end; das wäre super! Thx |
DP-Maintenance
Dieses Thema wurde von "Luckie" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Falsche Sparte. |
Re: BitmaskToByte -> ByteToBitmask
in die erste Richtung würde ich es so machen:
Delphi-Quellcode:
in die andere Richtung wäre es dann so:
function BitmaskToByte(AValue:TBitmask):byte;
var i:integer; begin result := 0; // Rückgabewert auf 0 setzten. WICHTIG. Weglassen dieser Zeile kann zu faulen Ergebnisen führen. for i := 0 to 7 do if avalue.bits[i] then //Wenn dieser Wert der Bitmaske auf "1" steht, muss das Ergebnis um result := result or (1 shl i); //2 hoch der Position in der Bitmaske incrementiert werden. end;
Delphi-Quellcode:
function ByteToBitmask(AValue:Byte):TBitmask;
var i: Integer; begin for i := 0 to 7 do result.bits[i] := AValue and (1 shl i) <> 0; end; |
Re: BitmaskToByte -> ByteToBitmask
Liste der Anhänge anzeigen (Anzahl: 1)
Für die Abbildung von Bits in Delphi finde ich Sets sehr hilfreich.
Damit kann man sich dann die Erstellung (und Konvertierung) von Hilfstypen/-klassen sparen. Im Anhang findet sich eine Beispiel-Unit (NcxTypes.pas), die verschiedene "Bitfield"-Typen definiert (TBitsX/TSetX). |
Re: BitmaskToByte -> ByteToBitmask
super :thumb:
:duck: (da programmiert man schon seit x-jahren und denkt man kann's - aber andere (jüngere) können's einfach noch besser - tja, ihr habt's einfach drauf!!!) Vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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