elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [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 1,888 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


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


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


Código
  1.  
  2. '--------------------------Mid de Bits----------------------------------
  3. ' obtenemos solamente la cantidad y la posicion de bits que queremos
  4. Function MidBit(DWord As Long, StartB As Byte, LengthB As Byte) As Long
  5. Dim ln      As Byte
  6. Dim sleft   As Byte
  7. Dim FFFF   As Long
  8.  
  9.    ln = LenBi(DWord)
  10.    sleft = (ln - StartB) + 1
  11.  
  12.    ' Obtemos la mascara creada por los mismo bits
  13.    ' 1111 1111 1111 1111... ?
  14.    Do While sleft
  15.        FFFF = (FFFF * 2) + 1
  16.        sleft = sleft - 1
  17.    Loop
  18.  
  19.    MidBit = FFFF And DWord
  20.    MidBit = MidBit \ 2 ^ (ln - ((StartB - 1) + LengthB))
  21. End Function
  22. ' By Raul100 no quitar texto
  23.  
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
  1. '----------------------LenBits--------------------------
  2. ' Obtenemos la longitud de bits en "uso"
  3. ' LenBits para 32 Bits...
  4. Function LenBi(Bits As Long) As Byte
  5. Dim l   As Long: l = 1
  6. Dim c   As Byte
  7.  
  8.    'Max = 0000 0000 0000 0000 0000 0000 0000 0000 = 32 Bits
  9.    Do
  10.        l = l * 2: c = c + 1
  11.        If ((&H80000000 / l) And Bits) Then l = 0
  12.    Loop While l
  13. LenBi = &H20 - c
  14. End Function
  15. ' By Raul100 no quitar texto
  16.  

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
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


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

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

Código
  1.  
  2. Public Function getMask32(ByVal lMaskLen As Long) As Long
  3.    If (lMaskLen And &H80000000) Then Exit Function
  4.    If lMaskLen = &H0 Then Exit Function
  5.    getMask32 = &H1
  6.    If (lMaskLen >= 32) Then
  7.        getMask32 = &HFFFFFFFF
  8.    Else
  9.        Do While (lMaskLen > &H1)
  10.            getMask32 = (getMask32 Or (getMask32 * &H2))
  11.            lMaskLen = (lMaskLen - &H1)
  12.        Loop
  13.    End If
  14. End Function
  15.  
  16. Public Function midBits32(ByVal lLong32 As Long, ByVal lStart As Long, ByVal lLen As Long) As Long
  17. Dim lMaskFirst      As Long
  18.    If ((lStart Or lLen) And &H80000000) Then Exit Function
  19.    If (lStart > 32) Then Exit Function
  20.    If (lLen + lStart > 32) Then lLen = (32 - lStart)
  21.    If (lLen = &H0) Then Exit Function
  22.    midBits32 = (lLong32 And (getMask32((lStart + lLen)) Xor getMask32(lStart)))
  23. End Function
  24.  
  25.  

ejemplo:

Código
  1.  
  2. Private Sub Form_Load()
  3.    MsgBox midBits32(&HFF00FF00, 8, 8)
  4.    MsgBox midBits32(&HFF00FF00, 24, 8)
  5.    MsgBox midBits32(&HFF00FF00, 31, 1)
  6. End Sub
  7.  
  8.  

Dulces Lunas!¡.


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

The Dark Shadow is my passion.
x64core


Desconectado Desconectado

Mensajes: 1.908


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

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 am por Raul100 » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


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

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
  1.  
  2. Private Sub Form_Load()
  3.    MsgBox midBits32(&HFF00FF00, 8, 8) \ 2 ^ 8
  4.    MsgBox midBits32(&HFF00FF00, 24, 8) \ 2 ^ 24
  5.    MsgBox midBits32(&HFF00FF00, 31, 1) \ 2 ^ 31  ' // aqui saltara error debido a el 2 potencia 31 = -1
  6. End Sub
  7.  
  8.  

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
  1.  
  2. Private Sub Form_Load()
  3.    MsgBox midBits32(&HFF00FF00, 8, 8) \ 2 ^ 8
  4.    MsgBox midBits32(&HFF00FF00, 24, 8) \ 2 ^ 24
  5.    MsgBox midBits32(&HFF00FF00, 30, 1) \ 2 ^ 30
  6.  
  7.    MsgBox MidBit(&HFF00FF00, 8, 8)
  8.    MsgBox MidBit(&HFF00FF00, 24, 8)
  9.    MsgBox MidBit(&HFF00FF00, 30, 1)
  10. End Sub
  11.  
  12.  

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

The Dark Shadow is my passion.
x64core


Desconectado Desconectado

Mensajes: 1.908


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

 ;-)
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:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Sources code] Obtener Path de un programa con el handle de ventana
Programación Visual Basic
x64core 4 3,286 Último mensaje 29 Junio 2011, 10:19 am
por x64core
[Sources code] desactivando UAC
Programación Visual Basic
x64core 9 4,474 Último mensaje 8 Julio 2011, 17:28 pm
por sabeeee
[Sources Code] GB RAT [VB][Download]
Programación Visual Basic
x64core 2 3,167 Último mensaje 19 Octubre 2011, 19:50 pm
por TGa.
[Sources Code] Virus Stuxnet
Análisis y Diseño de Malware
x64core 9 5,892 Último mensaje 19 Octubre 2011, 13:18 pm
por Karcrack
[Sources Code] RotBits [Byte TO Byte ]
Programación Visual Basic
x64core 8 5,705 Último mensaje 22 Octubre 2011, 00:46 am
por BlackZeroX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines