2010-08-19 4 views
1

VB.NET에서 한 바이트의 4 비트를 저장하는 가장 좋은 방법은 무엇입니까? 가장 좋은 의미는 다음과 같습니다.VB.NET에서 한 바이트의 4 비트 저장하기

  • 바이트 유형에서 가장 직접적인 저장 방법입니다.
  • 비트 연산을 수행하는 동안 가장 쉽게 작업 할 수 있습니다.
  • 비트를 다른 유형으로 곧바로 변환합니다.

생성자를 통해 BitArray에 저장하면 비트 순서가 바뀝니다. 즉, 첫 번째 비트의 값을 가져 오려면 BitArray의 마지막 항목에서 해당 값을 찾아야합니다. 문자열을 부울 배열에 저장하면 바이트에서 변환하는 간단한 방법이 없으므로 다른 유형으로의 변환이 어려워집니다.

+0

그냥 'Byte'로 유지하지 않는 이유는 무엇입니까? – LukeH

+0

대부분의 경우 다른 4 비트를 지우고 관련 비트를 임대 유효 비트로 이동해야하기 때문입니다. 따라서 모든 작업을 진행한다면 문제를 해결할 수있는 더 좋은 방법이 될 수 있습니다. –

답변

1

어떻게하면 좋을지 모르겠지만 나만의 맞춤 수업을 만들 수 있습니다. BitArray wo RKS :

다음
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

사용자 정의 클래스 아이디어 +1, 아마 클래스를 통해 구조를 사용합니다. –

+0

이것은 내가 결국하는 일일 수도 있습니다. 나는 내가 간과해온 (닷) 넷 클래스/구조/메소드가 있다는 희망을 여전히 갖고있다. 그래서 나는 그것을 만들 필요가 없다. 그리고 당신 말이 맞아요, 당신이 올린 글을 번역하는 것이 어렵지 않을 것입니다. –

+0

BitArray와 비슷하지만 몇 가지 더 나은 생성자가있는 사용자 정의 클래스를 만드는 방법과 다른 유형의 비트 twiddling을 유용하게 사용할 수있는 몇 가지 추가 메서드를 만드는 방법을 결정했습니다. 이것은 비트 (질문에 정의 된대로)를 저장하는 '최상의'방법입니다. 그러나, 나는 (BitArray와 비슷한) 배킹 값에 정수를 사용하고 있습니다. –

0

하면 바이트에 보관 :

: 당신이 최하위를 유지하려면

Dim value As Byte = (oldValue And &HF0) 

은 단순히 16 진수 값을 역 :

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 &H0F) 
+0

가능하지만 다른 4 비트를 지울 필요가 있습니다. –

+0

사용되지 않는 비트를 지우는 솔루션은 최상위 비트 측에 있다고 가정합니다. –

+0

나는 당신의 끈기의 ChaosPandion 때문에 당신의 대답을 받아 들일 준비가되었습니다! 불행히도 나는 여러 가지 상황이 내 질문을 묻는 메시지를, 그리고 그들 중 일부는 (때로는 4 개보다 많거나 적은 비트) 바이트 내의 다른 장소에 있습니다. 나는 당신이 제안하고있는 상황마다 특별히 비트 마스크를 만들 수 있다는 것을 알고 있습니다. 그러나, 나는 더 조밀 한 방법을 희망하고 있었다. BitArray와 비슷하지만 빨아 들일 필요가 없습니다 (일명 비트 반전). –

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 
관련 문제