Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   bit <---> word (https://www.delphipraxis.net/57152-bit-word.html)

TeronG 16. Nov 2005 14:40


bit <---> word
 
Hi
ich wollte/musste mal (16) bits in ein Word umrechnen und umgekehrt .. hab mir auch was zusammengebastelt, daß recht gut funtzt ..
Jetzt wollt ich eigentlich nur noch wissen, ob es in Delphi evtl. schon was vorgefertigtes/besseres gegeben hätte bzw. giebt?


Mein Codeschnipsel ^^
Delphi-Quellcode:
procedure WordToBit(eingang:Word;var bit: array of boolean);
var
  I : Integer;
begin
  for i := 0 to 15 do bit[i] := ((eingang div trunc(Power(2,i)))mod 2 > 0);
end;

procedure BitToWord(bit : array of boolean;var ausgang : Word);
var
  i : integer;
begin
  ausgang := 0;
  for I := 0 to 15 do if bit[i] then ausgang := ausgang + trunc(power(2,i));
end;
btw: Warum zum Geier kann ich in der Procedurendeklaration nicht array[0..15] of machen :gruebel:

sniper_w 16. Nov 2005 14:44

Re: bit <---> word
 
Zitat:

Warum zum Geier kann ich in der Procedurendeklaration nicht array[0..15] of machen
Das ginge nur mit einem neuen Typ...
Delphi-Quellcode:
type myType = array[0..15]of boolean;
Am sonsten ist es auch besser von der Geschwindigkeits her, array of TYPE zu schreiben.

SirThornberry 16. Nov 2005 14:46

Re: bit <---> word
 
eine fertige Funktion kenne ich da nicht aber "mod", "div", "trunc" und "power" sollte man da nicht nehmen, das sind riesen performancekiller. Warum verwendest du nicht die logichern Operatoren (and, or, xor, not)

Dax 16. Nov 2005 14:47

Re: bit <---> word
 
Das geht aber viel einfacher ;)

Delphi-Quellcode:
function BitsToInt(Bits: array of Boolean): Integer;
var i: Integer;
begin
  Result := 0;
  for i := 0 to High(Bits) do
  begin
    if Bits[i] then
      Result := Result shl 1 or 1
    else
      Result := Result shl 1;
  end;
end;

TeronG 16. Nov 2005 14:50

Re: bit <---> word
 
@Sniper: :wall: klar so sollts gehen ^^
Zitat:

Zitat von SirThornberry
eine fertige Funktion kenne ich da nicht aber "mod", "div", "trunc" und "power" sollte man da nicht nehmen, das sind riesen performancekiller. Warum verwendest du nicht die logichern Operatoren (and, or, xor, not)

hmm .. ka .. muss ich mich morgen mal reindenken (nehme aber auch fertige functionen :mrgreen: :duck: )

Dax 16. Nov 2005 14:54

Re: bit <---> word
 
Ach, ja, ich hab IntToBit vergessen ;)

Delphi-Quellcode:
function IntToBit(Int: Integer): TBitArray {array of Boolean};
var i: Integer;
begin
  SetLength(Result, 32);
  for i := 0 to 31 do
    Result[i] := (Int and (1 shl i)) <> 0;
end;

DGL-luke 16. Nov 2005 14:55

Re: bit <---> word
 
// ich werf hier nochmal meine vorschläge in den raum...

ginge das nicht auch so per Zeigerarithmetik bzw.Lookup-Tabelle?

Delphi-Quellcode:
// word to bit
var P:Pointer;

P := @SomeWord;
for i := 0 to 15 do
  begin
   bits[i] := boolean(P);
   Inc(P);
  end;

//andersrum:
//das hier sind die wertigkeiten, evtl. kommts noch auf LSA/MSA first an, muss man sehen, wie das im word liegt.
const Values = array[0..15] of integer =
({....}32,16,4,2,1);

for i := 0 to 15 do
 begin
  word := word + Values(i);
 end;

Dax 16. Nov 2005 15:02

Re: bit <---> word
 
Das geht natürlich auch, aber die Zeiger haben den Nachteil, das man sie nicht einfach auf .net portieren kann (und die sowieso ein wenig komisch im Umgang sind), und die Lookuptabelle ist recht schwer zu warten, ums mal so zu sagen. Ich persönlich bevorzuge einfachen und schnell verständlichen Code, deiner fällt da nur bedingt rein ;)

Luckie 16. Nov 2005 15:04

Re: bit <---> word
 
Also wenn du schon die zwei Bytes hast, dann kannst du MSDN-Library durchsuchenMAKEWORD benutzen.

Grishnak 16. Nov 2005 15:05

Re: bit <---> word
 
Es gibt die TBits-Klasse. Habe ich zwar noch nie benutzt - und weiß deshalb auch nicht, was sie alles kann -, aber vielleicht kannst du was damit anfangen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr.
Seite 1 von 2  1 2      

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