Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bitabfrage aus Hexstring (https://www.delphipraxis.net/23264-bitabfrage-aus-hexstring.html)

BTeam 31. Mai 2004 18:31


Bitabfrage aus Hexstring
 
Hallo,
Ich habe da ein kleinen Problem. Ich versuche mal die Sache zu beschreiben.
Ich habe ein String das eine Hex Zahl ist So ein Hex String sieht dann z.B. so aus 01040. Dieser Hex String wird durch Setzen von Bits/Flags erzeugt.

Die Flags die sehen so aus
0001, 0002, 0004, 0008, 0010, 0020, usw

Nun muss ich feststellen ob in dem Hex String z.B. 0010 gesetzt wurde oder nicht.
Wie stelle ich das an ?

Thx schon mal für die Hilfe

Muetze1 31. Mai 2004 19:26

Re: Bitabfrage aus Hexstring
 
Moin!

Einfach ausmaskieren...

Code:
  If ( Wert And $0020 ) = $0020 Then
    // gesetzt
  Else
    // nicht gesetzt
MfG
Muetze1

BTeam 31. Mai 2004 21:49

Re: Bitabfrage aus Hexstring
 
hmm...ok ich habe es so gemacht

Code:
IF (StrToHex(Liste.Cells[5,Liste.RowCount-2]) AND $02000) = $02000 THEN
  Label10.Caption := 'Gesetzt'
ELSE
  Label10.Caption := 'Nicht Gesetzt';
Delphi meint dann immer nur "Inkompatible Typen: 'String' und 'Integer'"
?

nailor 31. Mai 2004 21:53

Re: Bitabfrage aus Hexstring
 
Delphi-Quellcode:
IF ((StrToHex(Liste.Cells[5,Liste.RowCount-2])) AND $02000) = $02000 THEN
  Label10.Caption := 'Gesetzt'
ELSE
  Label10.Caption := 'Nicht Gesetzt';
oder

Delphi-Quellcode:
IF (StrToHex(Liste.Cells[5,Liste.RowCount-2])) AND $02000 = $02000 THEN
  Label10.Caption := 'Gesetzt'
ELSE
  Label10.Caption := 'Nicht Gesetzt';

Muetze1 31. Mai 2004 22:12

Re: Bitabfrage aus Hexstring
 
Moin!

Man muss die Werte nicht in "hex" umrechnen - die hexadezimale Schreibweise ist... naja, nur eine Schreibweise. Daher:

Delphi-Quellcode:
IF ((StrToInt(Liste.Cells[5,Liste.RowCount-2])) AND $02000) = $02000 THEN
  Label10.Caption := 'Gesetzt'
ELSE
  Label10.Caption := 'Nicht Gesetzt';
Ach ja, nochwas: wenn in der Zelle wirklich nur 00A0 z.B. drinne steht als String, dann muss man es so machen, weil sonst erkennt StrToInt() den String nicht als Hexwert sondern als Wert in dezimaler Schreibweise...

Delphi-Quellcode:
IF ((StrToInt('$' + Liste.Cells[5,Liste.RowCount-2])) AND $02000) = $02000 THEN
  Label10.Caption := 'Gesetzt'
ELSE
  Label10.Caption := 'Nicht Gesetzt';
MfG
Muetze1

BTeam 31. Mai 2004 23:52

Re: Bitabfrage aus Hexstring
 
Prima so geht....ich danke euch.

BTeam 2. Jun 2004 12:42

Re: Bitabfrage aus Hexstring
 
Noch eine Frage ^^
Wie kann ich in dem Hex String Flags/Bits setzte und entfernen?
thx

Muetze1 2. Jun 2004 14:27

Re: Bitabfrage aus Hexstring
 
Moin!

Eigentlich habe ich hier so gesehen, neue Frage, neuer Thread...

Grundsätzlich das Abfragen mit der logischen AND Verknüpfung hast du ja nun. Setzen von Bits mit einer OR Verknüpfung (WertNeu := WertAlt Or $0020) und löschen mit einer AND Verknüpfung von logisch invertierten Wert (WertNeu := WertAlt And (Not $0020)).

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 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