1

在 VB.NET 中从一个字节存储 4 位的最佳方法是什么?最好的意思是:

  • 从 Byte 类型存储最直接的方法。
  • 在执行按位运算时最容易使用。
  • 将位直接转换为其他类型。

通过其构造函数将它们存储在 BitArray 中会反转位的顺序。这意味着尝试获取第一位的值将需要在 BitArray 的最后一个条目中查找该值。将它们存储在布尔数组中不会提供从字节转换的直接方法,并且会阻碍转换为其他类型。

4

3 回答 3

1

如果您不喜欢它的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,但我认为这是正确的)。

于 2010-08-19T01:04:20.150 回答
0

将其保存在字节中:

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)
于 2010-08-19T00:43:23.803 回答
0

我同意将它们保存在一个字节中,但是不清楚为什么???你想要一个半字节......这个例子将一个字节的两个半字节放入不同的数组中

'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
于 2010-08-19T13:15:59.750 回答