AGB  ·  Datenschutz  ·  Impressum  







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

8 Integervariablen zu einem Byte

Ein Thema von Muellermilchtrinker · begonnen am 28. Jul 2011 · letzter Beitrag vom 28. Jul 2011
Antwort Antwort
Benutzerbild von Muellermilchtrinker
Muellermilchtrinker

Registriert seit: 1. Aug 2009
447 Beiträge
 
Delphi 2009 Professional
 
#1

8 Integervariablen zu einem Byte

  Alt 28. Jul 2011, 18:10
Delphi-Version: 2009
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?
Chuck Norris doesn't need backups. He just uploads his files and lets the world mirror them.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: 8 Integervariablen zu einem Byte

  Alt 28. Jul 2011, 18:15
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: 8 Integervariablen zu einem Byte

  Alt 28. Jul 2011, 18:20
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
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: 8 Integervariablen zu einem Byte

  Alt 28. Jul 2011, 18:33
Lieber so:
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 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
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

AW: 8 Integervariablen zu einem Byte

  Alt 28. Jul 2011, 18:42
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: 8 Integervariablen zu einem Byte

  Alt 28. Jul 2011, 18:48
Warum eigentlich 8 Einzelvariablen?

Delphi-Quellcode:
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;
den Record könnte man noch mit Operatoren ausrüsten, welchen ihn automatisch in und von Byte umkonvertieren.
$2B or not $2B
  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 19:30 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