Модуль класса для работы с внешними устройствами (побитная обработка данных)

Источник: codingclub

Вашему вниманию предлагается модуль класса ByteBooolean. Этот модуль класса очень полезен тем, кто работает с внешними устройствами, когда каждый бит в байте несёт определённую информацию, и каждый бит надо анализировать и обрабатывать отдельно.

Option Compare Database
Option Explicit

Private bByte As Byte
Private bMinus As Byte

′====================================================
′Модуль класса ByteBoolean - автор Дмитрий Сонных (sonni-dim@mail.ru)
′-------------------------------------------------------------
′За основу взят модуль ByteBoolean Катцына Антона
′c www.vbrussian.com раздел примеры.
′Я добавил пару новых свойств и изменил индексы массива
′-------------------------------------------------------------
′Создайте модуль типа Class, назовите его ByteBoolean, скопируйте в него этот текст, работайте ====================================================
′Класс использует переменную типа Byte для хранения восьми переменных типа Boolean. SetByte - Устанавливает бит 0-7 значением 1 или 0 (если Value = 0 то нулем, если нет то 1) GetByte - возвращает бит 0-7 TrueIsMinus1 - свойство которое говорит, что возвращать, при значении 1(Например True в VB это -1 и что бы было сходство с Boolean ,при влюченном свойстве, 1 будет возвращатся,как -1) ====================================================
Public Sub SetByte(Index As Byte, Value As Integer) ′Устанавливает значение указанного бита в 0 или 1 On Error GoTo erro1
If Value = 0 Then
bByte = bByte And Not (2 ^ (Index))
Else
bByte = bByte Or (2 ^ (Index))
End If
exit_SetByte:
Exit Sub
erro1:
′MsgBox Err.Description
Err.Raise 666, , "Ошибка записи в ByteBoolean!" _
& " Проверьте правильность посылаемых данных!"
Resume exit_SetByte

End Sub
′----------------------------------------------------------
Public Function GetByte(Index As Byte)
′Возвращает значение запрошенного бита
Dim a
On Error GoTo erro2
a = bByte And (2 ^ (Index))
If a Then a = 1
If a = 0 Or (bMinus = 0 And a = 1) Then
GetByte = a
Else
GetByte = -a
End If
Exit Function
erro2:
Err.Raise 666, , "Ошибка чтения из ByteBoolean!" _
& " Проверьте правильность посылаемых данных!"
End Function
′-----------------------------------------------------------
Public Property Let ValueByte(ByVal NewByteValue As Byte) ′Задает новое значение массива в виде целого числа (0 - 255)
bByte = NewByteValue
End Property
′-----------------------------------------------------------
Public Property Get ValueByte() As Byte
′Выдает значение массива в виде целого числа (0 - 255)
ValueByte = bByte
End Property
′-----------------------------------------------------------
Public Property Get TrueIsMinus1() As Boolean
If bMinus = 0 Then
TrueIsMinus1() = False
Else
TrueIsMinus1() = True
End If
End Property
′------------------------------------------------------------
Public Property Let TrueIsMinus1(ByVal vNewValue As Boolean)
If vNewValue Then
bMinus = 1
Else
bMinus = 0
End If
End Property
 


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=16346