exzahlen in Bits wandel

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    exzahlen in Bits wandel

    Hallo Leute, gibt es eine Funktion, mit der ich Hexadezimale Zahlen aus nem String in die einzelnen Bits zerlegen kann?

    Also ich habe eine exceldatei wo hexadezimale zahlen drin stehen, diese enthalten ein code, welcher mir einen Fehler einer Anlage anzeigt. die ersten 3 Bit stehen für das Modul, welches eine störung hat usw. jetzt möchte ich gerne die Hexzalen auslesen und in die einzelnen Bits zerlegen. wie geht das denn am Besten? gibt da ne Funktion, oder muss ich mir da was selbst schreiben, wenn ja, wie kann denn die einzelnen ziffern auslesen, die zahl wird ja als String eingelesen.
    Umwandeln von Hex nach Int ist realtiv simpel:
    dim i as integer = cint("&h" & hexstring)

    Das umwandeln von einzelnen Positionen in sinnvolle Werte musst du dann aber mW zu Fuss machen, da dich ja nicht nicht bits interessieren, sondern wieder einzelne integers etc. Ist aber relativ simpel, da VB inzwischen ja auch shilft left und shift right kennt.
    So what?

    VB.NET-Quellcode

    1. Public Enum MyMasks
    2. MaskID = &H700
    3. End Enum
    4. Public Function GetID(ByVal i As Integer) As Integer
    5. Return (i And MyMasks.MaskID) >> 8
    6. End Function


    Das wäre jetzt zb um die bits 9-11 (von rechts zählend) als Integer-Wert auszulesen. Das ganze läßt sich natürlich auch prima als Funktion schreiben, der man das StartBit und die Länge übergibt.

    Also ganz simpel:

    VB.NET-Quellcode

    1. Public Shared Function GetBitInt(ByVal int As Integer, ByVal startbit As Integer, ByVal laenge As Integer) As Integer
    2. ' create mask:
    3. Dim m As Integer
    4. For i As Integer = 0 To laenge - 1
    5. m = m Or (1 << (startbit + i))
    6. Next
    7. Return (int And (m >> startbit))
    8. End Function


    Aufruf zb:
    Dim i As Integer = &HF3
    Debug.Print(bits.GetBitInt(i, 4, 3))

    Ergebnis: 3 -> korrekt ;)

    Aufpassen natürlich im Zweifel beim höchstwertigen Bit, weil das ja das Vorzeichen ist!