Хранение 4 бит из байта в VB.NET - PullRequest
1 голос
/ 19 августа 2010

Каков наилучший способ хранить 4 бита из байта в VB.NET? Где лучше всего значит:

  • Самый простой способ хранения из байтового типа.
  • Легче всего работать при выполнении побитовых операций.
  • Простое преобразование битов в другие типы.

Хранение их в BitArray через его конструктор меняет порядок битов. Это означает, что попытка получить значение первого бита потребует поиска этого значения в последней записи в BitArray. Хранение их в массиве логических значений не дает простого способа преобразования из байта и препятствует преобразованию в другие типы.

Ответы [ 3 ]

1 голос
/ 19 августа 2010

Вы всегда можете создать свой собственный класс, если вам не нравится, как работает BitArray:

Public Class MaskedByte

    Private innerValue As Byte
    Private mask As Byte

    Public Sub New()
        MyBase.New
    End Sub

    Public Sub New(ByVal value As Byte, ByVal mask As Byte)
        MyBase.New
        innerValue = value
        Mask = mask
    End Sub

    Public Property Value As Byte
        Get
            Return (innerValue And Mask)
        End Get
        Set
            innerValue = value
        End Set
    End Property

    Public Property Mask As Byte
        Get
            Return mask
        End Get
        Set
            mask = value
        End Set
    End Property

End Class

Затем использовать:

Dim myMaskedByte As MaskedByte
myMaskedByte.Mask = &HF0
myMaskedBytef3.Value = someValue

(я не знаю VB.NET, но думаю, что это правильно).

0 голосов
/ 19 августа 2010

Я согласен с тем, чтобы хранить их в байтах, однако не понятно, почему ???Вы хотите один из кусочков ... Этот пример помещает оба кусочка байта в разные массивы

'Test Data
'create a byte array containing EVERY possible byte value
Dim b(255) As Byte
For x As Integer = 0 To b.Length - 1
    b(x) = CByte(x)
Next

Dim bMS(255) As Byte 'most sig.
Dim bLS(255) As Byte 'least sig.
Const mask As Byte = 15
'
For x As Integer = 0 To b.Length - 1
    bMS(x) = b(x) >> 4
    bLS(x) = b(x) And mask
Next
0 голосов
/ 19 августа 2010

Держите это в байте:

Dim b1 As Boolean = (value And &H01) = 1
Dim b2 As Boolean = (value And &H02) = 1
Dim b3 As Boolean = (value And &H04) = 1
Dim b4 As Boolean = (value And &H08) = 1

Очистка битов также очень проста:

Dim value As Byte = (oldValue And &HF0)

Если вы хотите сохранить наименее значимое, просто поменяйте местами шестнадцатеричное значение:

Dim value As Byte = (oldValue And &H0F)
...