![]() |
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:
btw: Warum zum Geier kann ich in der Procedurendeklaration nicht array[0..15] of machen :gruebel:
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; |
Re: bit <---> word
Zitat:
Delphi-Quellcode:
Am sonsten ist es auch besser von der Geschwindigkeits her, array of TYPE zu schreiben.
type myType = array[0..15]of boolean;
|
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)
|
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; |
Re: bit <---> word
@Sniper: :wall: klar so sollts gehen ^^
Zitat:
|
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; |
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; |
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 ;)
|
Re: bit <---> word
Also wenn du schon die zwei Bytes hast, dann kannst du
![]() |
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:16 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 by Thomas Breitkreuz