Hexadezimal + bitewise + maskierung

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Hexadezimal + bitewise + maskierung

    Hi...habe mal wieder eine Frage.

    ich habe 8 Digitalports (haben also jeder zwei Zustände: 0 & 1) diese frage ich ab und bekomme eine Hexadezimalzahl(zweistellig) zurück. Nun wurde mir gesagt, dass ich dann mittels bitwise and und maskierung darauf komme welcher Port auf 1 steht. gesagt sei wenn alle Ports auf 0 sind bekomme ich FF und wenn alle auf 1 stehen 00. Ich verstehe aber einfach nicht wie ich darauf komme. Wäre super wenn mir jemand das erklären kann und mir auch ein beispiel geben könnte

    Danke schonmal!!

    Eggord schrieb:

    bekomme eine Hexadezimalzahl(zweistellig) zurück

    Du bekommst eine ZAHL. Diese kann man Dezimal, Binär, Hexadezimal, Octal ... (etc) ... DARSTELLEN.
    WAS bekommst du? Eine ZAHL oder einen STRING.

    Wenn ZAHL (üblicherweise Integer), dann:

    Gesetzt As Boolean = (Zahl AND 1<<BitNummer) > 0

    Bsp:
    Zahl = 5

    1<<0 -> 1
    5 AND 1 -> 1; ist größer 0

    1<<1 -> 2
    5 AND 2 -> 0; ist nicht größer 0

    1<<2 -> 4
    5 AND 4 -> 4; ist größer 0

    "<<" ist der "Shift" Operator: msdn.microsoft.com/de-de/library/7haw1dex(v=vs.80).aspx

    EDIT
    oder auch gleich: msdn.microsoft.com/de-de/library/2zxz5d6h(v=vs.80).aspx (für faule ;) )
    ja ich bekomme eine zahl. ich dachte immer dass ich die Darstellung schon bei der Deklarierung festlege aber das ist ja total falsch.

    Danke für die schnelle Antwort!

    Das mit dem BitVector32 verstehe ich ehrlich gesagt nicht ^^
    Du kannst die Bits natürlich auch über eine enumerierte Maske abfragen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. <Flags()>
    2. Enum PortBits As Byte
    3. Bit0 = &H1
    4. Bit1 = &H2
    5. Bit3 = &H4
    6. Bit4 = &H8
    7. Bit5 = &H10
    8. Bit6 = &H20
    9. Bit7 = &H40
    10. Bit8 = &H80
    11. End Enum
    12. Sub XXX()
    13. Dim value As Byte = 123
    14. Dim bb As PortBits = DirectCast(value, PortBits)
    15. If bb.HasFlag(PortBits.Bit0 Or PortBits.Bit4) Then
    16. MessageBox.Show((PortBits.Bit0 Or PortBits.Bit4).ToString)
    17. End If
    18. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!