![]() |
Delphi-Version: 2009
8 Integervariablen zu einem Byte
Hallo,
bitte nicht hauen, aber ich weiß, dass das ein wenig suboptimal ist, mit den aktuellen Variablentypen. Also ich habe 8 Integervariablen, in denen entweder eine 1 oder 0 drin steht. Nun möchte ich diese zu einem Byte zusammenfügen, also als Bytemuster (Bsp: 0b11001100) und diese in einer Bytevariablen speichern, damit ich diese nachher über RS232 verschicken kann? Gibt es da vorgefertige Funktionen oder soll ich mir einfach eine Funktion schreiben, wo ich meine Variablen eingeb und diese dann mit 2^0,2^1,2^2, etc. multipliziert werden und dann addiert, damit ich mein umgerechneten Bytewert hab und diese dann in die Bytevariable zuweisen? |
AW: 8 Integervariablen zu einem Byte
Etwas Vorgefertigtes kenne ich dafür nicht, aber so eine Funktion ist ja recht schnell selbst geschrieben. Besser wäre es aber wohl, wenn Du das Konzept noch einmal überdenken würdest ;)
|
AW: 8 Integervariablen zu einem Byte
Delphi-Quellcode:
var
var1, var2, var3, var4, var5, var6, var7, var8: Integer; ResultVar: Byte; begin var1 := 0; var2 := 1; var3 := 0; var4 := 0; var5 := 0; var6 := 1; var7 := 1; var8 := 1; ResultVar := (var1 shl 7) or (var2 shl 6) or (var3 shl 5) or (var4 shl 4) or (var5 shl 3) or (var6 shl 2) or (var7 shl 1) or var8; // sollte 71 ergeben |
AW: 8 Integervariablen zu einem Byte
Lieber so:
Delphi-Quellcode:
Gruß
var
var1, var2, var3, var4, var5, var6, var7, var8: Integer; ResultVar: Byte; begin var1 := 0; var2 := 1; var3 := 0; var4 := 0; var5 := 0; var6 := 1; var7 := 1; var8 := 1; ResultVar := ((var1 and 1) shl 7) or ((var2 and 1) shl 6) or ((var3 and 1) shl 5) or ((var4 and 1) shl 4) or ((var5 and 1) shl 3) or ((var6 and 1) shl 2) or ((var7 and 1) shl 1) or (var8 and 1); // sollte 71 ergeben K-H |
AW: 8 Integervariablen zu einem Byte
Oder gleich als Funktion?
Delphi-Quellcode:
uses math;
function IntArrayToByte(IntArray: array of integer): Byte; var i: integer; begin Result := 0; for i := Low(IntArray) to math.Min(High(IntArray), 7) do Result := Result or (IntArray[i] and 1) shl i; end; |
AW: 8 Integervariablen zu einem Byte
Warum eigentlich 8 Einzelvariablen?
Delphi-Quellcode:
den Record könnte man noch mit Operatoren ausrüsten, welchen ihn automatisch in und von Byte umkonvertieren.
type
TMeinByte = Set of 0..7; // oder TNewByte = record private function GetBit(idx: Integer): Boolean; procedure SetBit(idx: Integer; Value: Boolean); public Data: Byte; //Data: TMeinByte; property Bit[idx: Integer]: Boolean read GetBit write SetBit; default; end; function TNewByte.GetBit(idx: Integer): Boolean; begin Result := Data and (1 shl idx) <> 0; //Result := idx in Data; end; procedure TNewByte.SetBit(idx: Integer; Value: Boolean); begin if Value then Data := Data or (1 shl idx) //Include(Data, idx) else Data := Data and not (1 shl idx); //Exclude(Data, idx); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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