1

VB.NET で 1 バイトから 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)

最下位を維持したい場合は、16進値を逆にするだけです。

Dim value As Byte = (oldValue And &H0F)
于 2010-08-19T00:43:23.803 に答える
0

それらをバイトに保持することに同意しますが、理由は明らかではありませんか??? ニブルの 1 つが必要です... この例では、バイトの両方のニブルを異なる配列に配置します

'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 に答える