buenas, comparto estos codes que hice que me son de mucha utilidad cuando trabajan con bits
'--------------------------Mid de Bits----------------------------------
' obtenemos solamente la cantidad y la posicion de bits que queremos
Function MidBit(DWord As Long, StartB As Byte, LengthB As Byte) As Long
Dim ln As Byte
Dim sleft As Byte
Dim FFFF As Long
ln = LenBi(DWord)
sleft = (ln - StartB) + 1
' Obtemos la mascara creada por los mismo bits
' 1111 1111 1111 1111... ?
Do While sleft
FFFF = (FFFF * 2) + 1
sleft = sleft - 1
Loop
MidBit = FFFF And DWord
MidBit = MidBit \ 2 ^ (ln - ((StartB - 1) + LengthB))
End Function
' By Raul100 no quitar texto
La funcion MIdBit usa la funcion LenBits pueden agregarle el codigo de la funcion lenBits al Midbits tambien...
Algo importante la funcion MidBit trata directamente con los Bits asi que debemos saber cuando bits usa el numero
que introduciremos esta funcion toma en cuenta los 0's a la izquierda ( es normal ) porque obviamente no valen nada.
Tambien algo importante MidBit NO es toma los Bits como Cadenas
Por ejemplo si tenemos este binario:
0000 0010 0010 0000queremos obtener los Bits que esta en negrita, Obtendremos 10 ( el 0 de la izquierda no vale nada )
eso es de esperarselo
tambien se puede modificar para que lo obtenga pero no tendria logica
lo correcta es que no lo tome
'----------------------LenBits--------------------------
' Obtenemos la longitud de bits en "uso"
' LenBits para 32 Bits...
Function LenBi(Bits As Long) As Byte
Dim l As Long: l = 1
Dim c As Byte
'Max = 0000 0000 0000 0000 0000 0000 0000 0000 = 32 Bits
Do
l = l * 2: c = c + 1
If ((&H80000000 / l) And Bits) Then l = 0
Loop While l
LenBi = &H20 - c
End Function
' By Raul100 no quitar texto
La funcion LenBi obtiene el numero de bits en "uso"
por ejemplo el binario:
0000 0001 0101 0010
Obtendremos 9 ( los bits de la izquierda no valen nada )
y es logico y no tendria sentido sino usaramos la de VB
es mas yo creo que asi funciona la funcion real de VB
creo
las funciones son para 32Bits se pueden modificar para 64Bits usando dos de tipo Longs tambien