AGB  ·  Datenschutz  ·  Impressum  







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

Hexadezimal < > 8 bits

Ein Thema von stay · begonnen am 29. Mär 2017 · letzter Beitrag vom 2. Apr 2017
Antwort Antwort
Seite 1 von 2  1 2      
stay

Registriert seit: 5. Mär 2017
20 Beiträge
 
#1

Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 18:20
Hallo

ich bin zwar immer noch an meiner GUI dran, muss jedoch nebenbei auch an der Funktion arbeiten.

Ich habe 8 Bits in eine Hexadezimalzahl umgewandelt und umgekehrt, es funktioniert, aber es gefällt mir überhaupt nicht. Würdet ihr euch mal kurz meine 2 Funktionen angucken und mir helfen sie zu verbessern?

Die checkbox ist hierbei als bit zu sehen. die hexadezimal ist immer 2-stellig.

Zitat:
i := 0;
if Bit7.checked = true then i := i +1;
if Bit6.checked = true then i := i +2;
if Bit5.checked = true then i := i +4;
if Bit4.checked = true then i := i +8;
if Bit3.checked = true then i := i +16;
if Bit2.checked = true then i := i +32;
if Bit1.checked = true then i := i +64;
if Bit0.checked = true then i := i +128;
Label1.Caption:='Int-Wert: ' + inttostr(i);
h := 'i2cset -y 1 0X24 0x' + inttohex(i,2);
Zitat:
i := strtoint(string HEX);
if i >= 128 then
begin Bit10.checked := true; i := i-128; end
else Bit10.checked := false;
if i >= 64 then
begin Bit11.checked := true; i := i-64 end
else Bit11.checked := false;
if i >= 32 then
begin Bit12.checked := true; i := i-32 end
else Bit12.checked := false;
if i >= 16 then
begin Bit13.checked := true; i := i-16 end
else Bit13.checked := false;
if i >= 8 then
begin Bit14.checked := true; i := i-8 end
else Bit14.checked := false;
if i >= 4 then
begin Bit15.checked := true; i:= i-4 end
else Bit15.checked := false;
if i >= 2 then
begin Bit16.checked := true; i := i-2 end
else Bit16.checked := false;
if i >= 1 then Bit17.checked := true
else Bit17.checked := false;
Bitte nicht auslachen, mir gefällt es selbst nicht.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 18:27
Hilft Dir mein Tutorial weiter? Denn eigentlich brauchst Du doch nur das binäre UND zum Auswerten und das binäre ODER zum Setzen der Bits.
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
stay

Registriert seit: 5. Mär 2017
20 Beiträge
 
#3

AW: Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 18:48
Bin mir nicht sicher, werde deinen Link genauer angucken müssen.

Also ich brauche 8 Bits aus verschiedenen Funktionen, die ich dann zusammen setze. oder andersrum.
Kann ich in Lazarus 8 Bits zu einem byte umwandeln? Und dafür müsste ich die Hexadezimal erstmal in byte umwandeln :/

Danke schonmal
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 18:50
8 Bits SIND ein Byte, da gibt es nichts umzuwandeln . Ich kann mir aber denken, was Du meinst.
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
stay

Registriert seit: 5. Mär 2017
20 Beiträge
 
#5

AW: Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 18:56
Also ich brauche 8 Boolean statt ein B01010101 Wert am Ende.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 18:57
Und wenn man bedenkt, dass man einen Boolean auch als 0 für false und 1 für true sehen kann, was fällt Dir dann an Deiner "Binärzahl" auf?
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
stay

Registriert seit: 5. Mär 2017
20 Beiträge
 
#7

AW: Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 19:50
Ja xD 8bit - 1 byte - 0,5 word.

Wollte nur sicher gehen, dass es mir wichtig ist 8 getrennte bits in einen byte zusammen zu führen für deinen link. Und das auch in der Richtigen Reihenfolge. Du siehst an meiner Lösung, dass ich es selbst nicht elegant lösen konnte :/
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 20:12
Erstmal zu if Bit7.checked = true then .
Diese Konstanten sollte man immer nur für Zuweisungen, aber niemals für Vergleicher verwenden,
denn wie bereits bemerkt, besteht ein Delphi-Boolean intern aus einem Byte, wo es 1 Mal das False und 255 Mal ein True Nicht-False gibt.
und bei einem LongBool hast du den Spaß sogar mit 4.294.967.295 Mal dem "True".

i := i + 1;
Wenn man "Binär" rechnen will, dann natürlich mit binären Operatoren ala OR und AND und nicht mit arithmetischen Operatoren ala ADD (+),
denn B := B or $01; // oder 1 arbeitet immer richtig, aber ein B := B + $01; // oder 1 macht Probleme, wenn dieses Bit bereits gesetzt ist.
Aber dafür hast'e ja nun das Tutorial.

Delphi-Quellcode:
var B: Boolean;

B := Boolean(3); // die Variable könnte mal ausversehn mit einem "unschönen" True aus irgendeiner Funktion raus kommen.

if B = True then ShowMessage('Falsch: True');
if B = False then ShowMessage('Falsch: False');

if B then ShowMessage('Richtig: True');
if not B then ShowMessage('Richtig: False');

PS: TCheckListBox und eine For-Schleife über alle Bits/CheckBoxen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Mär 2017 um 20:17 Uhr)
  Mit Zitat antworten Zitat
stay

Registriert seit: 5. Mär 2017
20 Beiträge
 
#9

AW: Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 20:51
Das macht natürlich Sinn. Hupps. Unabhängig von der Bit Verarbeitung, da muss ich mich erst mal reindenken. Kann ich in lazarus “relativ“ einfach ein byte in eine 2stellige hexadezimal Zahl umwandeln?
IntToHex( x,y ) war ja perfekt, direkt y für 2 Stellen nutzen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Hexadezimal < > 8 bits

  Alt 29. Mär 2017, 21:03
Das sollte in Lazarus wie im Delphi funktionieren .... uralte APIs, das hatte Lazarus/FreePascal zu Beginn fast alles 1:1 übernommen.

Es gibt noch BinToHex (aber Achtung, da ist die Bytefolge anders)
und Format kann auch Hexadezimal.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:44 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