AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BitmaskToByte -> ByteToBitmask

Ein Thema von heri · begonnen am 6. Mai 2008 · letzter Beitrag vom 6. Mai 2008
Antwort Antwort
heri

Registriert seit: 20. Mär 2006
81 Beiträge
 
Delphi 2006 Enterprise
 
#1

BitmaskToByte -> ByteToBitmask

  Alt 6. Mai 2008, 07:50
ich habe in der DP folgenden Code gefunden um eine Bitmask als Byte darzustellen zB. 11000001 -> 1+2+128 -> 131

Delphi-Quellcode:
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;
siehe DP: http://www.delphipraxis.net/internal...=bitmasktobyte

nun möchte ich die "Umkehrfunktion" haben und habe dazu folgenden Code erstellt:

Delphi-Quellcode:
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;
kann jemand den aufgeführten Code optimieren oder hat eine bessere Vorgehensweise?
das wäre super!
Thx
  Mit Zitat antworten Zitat
6. Mai 2008, 07:54
Dieses Thema wurde von "Luckie" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Falsche Sparte.
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: BitmaskToByte -> ByteToBitmask

  Alt 6. Mai 2008, 08:06
in die erste Richtung würde ich es so machen:
Delphi-Quellcode:
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;
in die andere Richtung wäre es dann so:

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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#4

Re: BitmaskToByte -> ByteToBitmask

  Alt 6. Mai 2008, 09:04
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).
Angehängte Dateien
Dateityp: zip ncxwow64_195.zip (104,9 KB, 20x aufgerufen)
  Mit Zitat antworten Zitat
heri

Registriert seit: 20. Mär 2006
81 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: BitmaskToByte -> ByteToBitmask

  Alt 6. Mai 2008, 09:32
super


(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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz