elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 09:06  


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  [Sources Code] MidBit + LenBi [Nivel de bit]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Sources Code] MidBit + LenBi [Nivel de bit]  (Leído 289 veces)
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
[Sources Code] MidBit + LenBi [Nivel de bit]
« en: 28 Octubre 2011, 23:35 »


buenas, comparto estos codes que hice que me son de mucha utilidad cuando trabajan con bits


Código
 
'--------------------------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 0000
queremos 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 :P
lo correcta es que no lo tome :)



Código
'----------------------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 :xD
es mas yo creo que asi funciona la funcion real de VB :P creo

las funciones son para 32Bits se pueden modificar para 64Bits usando dos de tipo Longs tambien :)






En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [Sources Code] MidBit + LenBi [Nivel de bit]
« Respuesta #1 en: 29 Octubre 2011, 02:09 »

...
Una funcion mas rapida y facil de entender...

Código
 
Public Function getMask32(ByVal lMaskLen As Long) As Long
   If (lMaskLen And &H80000000) Then Exit Function
   If lMaskLen = &H0 Then Exit Function
   getMask32 = &H1
   If (lMaskLen >= 32) Then
       getMask32 = &HFFFFFFFF
   Else
       Do While (lMaskLen > &H1)
           getMask32 = (getMask32 Or (getMask32 * &H2))
           lMaskLen = (lMaskLen - &H1)
       Loop
   End If
End Function
 
Public Function midBits32(ByVal lLong32 As Long, ByVal lStart As Long, ByVal lLen As Long) As Long
Dim lMaskFirst      As Long
   If ((lStart Or lLen) And &H80000000) Then Exit Function
   If (lStart > 32) Then Exit Function
   If (lLen + lStart > 32) Then lLen = (32 - lStart)
   If (lLen = &H0) Then Exit Function
   midBits32 = (lLong32 And (getMask32((lStart + lLen)) Xor getMask32(lStart)))
End Function
 
 

ejemplo:

Código
 
Private Sub Form_Load()
   MsgBox midBits32(&HFF00FF00, 8, 8)
   MsgBox midBits32(&HFF00FF00, 24, 8)
   MsgBox midBits32(&HFF00FF00, 31, 1)
End Sub
 
 

Dulces Lunas!¡.


« Última modificación: 29 Octubre 2011, 02:20 por BlackZeroX (Astaroth) » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: [Sources Code] MidBit + LenBi [Nivel de bit]
« Respuesta #2 en: 29 Octubre 2011, 02:27 »

como funcionan tus funciones a mi no me da :P
digamos la primera el bin:
11111111000000001111111100000000

parametros 8,8

se supone que debe de devolver 1111 1111
devuelve 65280 osea con 0's :P

PD: me equivoque :xD
entonces deberia devolver 0 :P
« Última modificación: 29 Octubre 2011, 02:33 por Raul100 » En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [Sources Code] MidBit + LenBi [Nivel de bit]
« Respuesta #3 en: 29 Octubre 2011, 02:34 »

Solo realiza una mascara desde A de longitud B, en ningun momento cambio el valor de esos bits, es decir, en ningun momento los recorro a la derecha:

11111111000000001111111100000000   con a = 8, b = 8
return:
00000000000000001111111100000000

para que quede igual que la tuya solo le falta dos pasos una potencia y una divicion:

Código
 
Private Sub Form_Load()
   MsgBox midBits32(&HFF00FF00, 8, 8) \ 2 ^ 8
   MsgBox midBits32(&HFF00FF00, 24, 8) \ 2 ^ 24
   MsgBox midBits32(&HFF00FF00, 31, 1) \ 2 ^ 31  ' // aqui saltara error debido a el 2 potencia 31 = -1
End Sub
 
 

Yo cuento por NORMA y por que asi esta en definicion como 0 el menos significativo es decir el que esta a la derecha y tu lo haces alreves...

Código
 
Private Sub Form_Load()
   MsgBox midBits32(&HFF00FF00, 8, 8) \ 2 ^ 8
   MsgBox midBits32(&HFF00FF00, 24, 8) \ 2 ^ 24
   MsgBox midBits32(&HFF00FF00, 30, 1) \ 2 ^ 30
 
   MsgBox MidBit(&HFF00FF00, 8, 8)
   MsgBox MidBit(&HFF00FF00, 24, 8)
   MsgBox MidBit(&HFF00FF00, 30, 1)
End Sub
 
 

Dulces Lunas!¡.
« Última modificación: 29 Octubre 2011, 03:49 por BlackZeroX (Astaroth) » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: [Sources Code] MidBit + LenBi [Nivel de bit]
« Respuesta #4 en: 29 Octubre 2011, 02:52 »

 ;-)
me ah gustado tio :)
por otra parte ahora me probad con negativos me e fijado que la mia no funciona con negativos :P
la modificare
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines