|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
need convert a value (integer) into bytearray with bits 0-31I attempted to make one in VB.NET but it dind't work at all.. Private buffer() As Byte 'OUTPUT OF BITS goes here Dim bitPosition as Integer = Buffer(i) * 8 'current position of Buffer Private bitMaskOut() As Integer = {0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, &H1FFFF, &H3FFFF, &H7FFFF, &HFFFFF, &H1FFFFF, &H3FFFFF, &H7FFFFF, &HFFFFFF, &H1FFFFFF, &H3FFFFFF, &H7FFFFFF, &HFFFFFFF, &H1FFFFFFF, &H3FFFFFFF, &H7FFFFFFF, -1} Sub setBits(ByVal numBits As Integer, ByVal value As Integer) Dim bytePos As Integer = bitPosition >> 3 Dim bitOffset As Integer = 8 - (bitPosition And 7) bitPosition += numBits While numBits > bitOffset ' buffer(bytePos) &= ~ bitMaskOut(bitOffset) 'mask out the desired area Buffer(bytePos) = -(Buffer(bytePos) And bitMaskOut(bitOffset)) - 1 ' buffer(bytePos) |= (value >> (numBits-bitOffset)) and bitMaskOut(bitOffset) Buffer(bytePos) = (Buffer(bytePos) Or (value >> (numBits - bitOffset)) And bitMaskOut(bitOffset)) bytePos += 1 numBits -= bitOffset End While If (numBits = bitOffset) Then ' buffer(bytePos) &= ~ bitMaskOut(bitOffset) Buffer(bytePos) = -(Buffer(bytePos) And bitMaskOut(bitOffset) - 1) ' buffer(bytePos) |= value and bitMaskOut(bitOffset) Buffer(bytePos) = (Buffer(bytePos) Or value And bitMaskOut(bitOffset)) Else ' buffer(bytePos) &= ~ (bitMaskOut(numBits)<<(bitOffset - numBits)) Buffer(bytePos) = -(Buffer(bytePos) And (bitMaskOut(numBits) << (bitOffset - numBits)) - 1) ' buffer(bytePos) |= (value and bitMaskOut(numBits)) << (bitOffset - numBits) Buffer(bytePos) = (Buffer(bytePos) Or (value And bitMaskOut(numBits)) << (bitOffset - numBits)) End If End Sub could someone tell me why it doesn't work? or better yet is there a built in function to do this much quicker? I kinda seen BitArrays inside vb.net 2005 Any help would be appericated thanks Not sure what your intention is here. Are you wanting to create a single
byte for each of the bits in an integer that contains the value either 0 or 1? If that is your intention, there are a couple of ways of doing it. Here is just one way: Public Sub ToArray(ByVal theValue As Integer, ByVal theArray() As Byte) If theArray.Length <> 32 Then Throw New ArgumentException("theArray must be 32 bytes in length") End If For i As Integer = 0 To 31 theArray(i) = theValue And 1 theValue = theValue >> 1 Next End Sub
what is a static property and a cursor question
Why is this simple addition throwing an overflow exception? Delete Directory not working Data entry into ComboBox Create Serial Number VB.NET debug error VS 2005 baffled at step 1 How to run and communicate a DOS program file in a VB.NET program? Need help with CreateFile API function Problem saving txt box with enter key |
|||||||||||||||||||||||