Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Allgemein / Bits / Word

Zwei Bytes sind ein Word

Einleitung

VB kennt leider keine einfache Möglichkeit, auf die einzelnen Bytes (je 8 Bits) eines Words (16-Bits) zuzugreifen. Mit den unten vorgestellten Routinen wird dies ermöglicht.

Beispiele

Einfache Aufrufe sehen so aus:

Dim w As Integer
Dim b As Byte

w = Bytes2Word(1, 0)     'w = 256   (1*256+0)
w = Bytes2Word(255, 255) 'w = -1    (alle Bits gesetzt)
w = Bytes2Word(123, 45)  'w = 31533 (123*256+45)
b = HiByte(w)            'b = 123
b = LoByte(w)            'b = 45

Das besondere an diesen Routinen ist, dass LoByte und HiByte in einer Zuweisung auch auf der linken Seite des Gleichheitszeichens stehen dürfen (ähnlich wie Mid$, s.a. "Texte wiederholen"). So kann auch ein einzelnes Byte in einem Word gesetzt werden:

HiByte(w) = 43          'w = 11053 (43*256+45)
LoByte(w) = 21          'w = 11029 (43*256+21)
HiByte(w) = 0           'w = 21    (0*256+21)

Code / Quelltext

Um LoByte und HiByte auch für Zuweisungen nutzen zu können, werden sie nicht einfach als Funktionen sondern als Property-Prozeduren definiert.

Funktion Bytes2Word
Public Function Bytes2Word(ByVal HiByte As Byte, ByVal LoByte As Byte) As Integer
  If HiByte And &H80 Then
    Bytes2Word = (HiByte And &H7F) * &H100& Or LoByte Or &H8000
  Else
    Bytes2Word = (HiByte * &H100&) Or LoByte
  End If
End Function
Property-Prozeduren für LoByte
Public Property Get LoByte(ByRef Word As Integer) As Byte
  LoByte = Word And &HFF
End Property

Public Property Let LoByte(ByRef Word As Integer, ByVal aByte As Byte)
  Word = Word And &HFF00 Or aByte
End Property
Property-Prozeduren für HiByte

Da das höherwertige Byte auch das Vorzeichen enthält, muss dieses berücksichtigt werden, um einen Überlauf zu vermeiden:

Public Property Get HiByte(ByRef Word As Integer) As Byte
  HiByte = (Word And &HFF00&) \ &H100
End Property

Public Property Let HiByte(ByRef Word As Integer, ByVal aByte As Byte)
  If aByte And &H80 Then
    Word = Word And &HFF Or (aByte And &H7F) * &H100 Or &H8000
  Else
    Word = Word And &HFF Or aByte * &H100
  End If
End Property

© Jost Schwider, 10.10.2001-10.10.2001 - http://vb-tec.de/byteword.htm