comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[vb6] Recopilacion de Funciones con operaciones Binarias.

  • 5 Respuestas
  • 2470 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« en: Octubre 25, 2012, 05:22:11 pm »
Hola gente de IH, hoy les traigo un aporte que me interesó de elhacker.net específicamente del usuario: BlackZeroX▓▓▒▒░░, a quien concidero un gran coder.

Básicamente:

Bueno ya sabemos que las funciones con operaciones binarias son mas rápidas y mas practicas a la hora de ejecutarse.

La intención de este tema es que se creen una sola publicacion donde se pueden encontrar estas funciones de manera amena.

Si alguien se sabe mas y quiere aportarlas están en el lugar indicado.

a continuación las funciones...

Temibles Lunas!¡.

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #1 en: Octubre 25, 2012, 05:25:26 pm »
Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta

Public Function LongToByte(ByVal lVal As Long) As Byte()
Dim bRet(0 To 3)        As Byte
    bRet(3) = (lVal And &HFF000000) \ &H1000000
    bRet(2) = (lVal And &HFF0000) \ &H10000
    bRet(1) = (lVal And &HFF00&) \ &H100
    bRet(0) = (lVal And &HFF)
    LongToByte = bRet
End Function

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Private sub ColorLongToRGB(ByVal LngColor As Long, ByRef OutRed As Byte, ByRef OutGreen As Byte, ByRef OutBlue As Byte)
   OutBlue = (LngColor And &HFF0000) \ &H10000
   OutGreen = (LngColor And &HFF00&) \ &H100
   OutRed = (LngColor And &HFF)
End Function

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #2 en: Octubre 25, 2012, 05:26:19 pm »
Cambio rapido del signo a un valor dado N ( habitualmente:  lval=(lval*(-1)) )

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Private Sub lChangeSign(ByRef lVal As Long)
    '   //  Para cualquier valor que lVal pueda tomar.
    '   //  Cambia de signo a un numero( + a - y de - a +).
    lVal = ((Not lVal) + 1)
End Sub
'   //  Para valores tipo Integer
Private Sub iChangeSign(ByRef iVal As Integer)
    '   //  Para cualquier valor que iVal pueda tomar.
    '   //  Cambia de signo a un numero( + a - y de - a +).
    lVal = ((Not lVal) + 1)
End Sub

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #3 en: Octubre 25, 2012, 05:26:54 pm »
Alternativa a htons@Ws2_32 (API)

No tienes permisos para ver links. Registrate o Entra con tu cuenta
PAra quienes no lo entiendan o lo vean demasiado Revuelto el codigo original esta en esta web:
No tienes permisos para ver links. Registrate o Entra con tu cuenta

' by Mike D Sutton, Mike.Sutton@btclick.com, 20040914

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Public Function SwapEndian08(ByVal dw As Long) As Long
' by Mike D Sutton, Mike.Sutton@btclick.com, 20040914
  SwapEndian08 = _
      (((dw And &HFF000000) \ &H1000000) And &HFF&) Or _
      ((dw And &HFF0000) \ &H100&) Or _
      ((dw And &HFF00&) * &H100&) Or _
      ((dw And &H7F&) * &H1000000)
  If (dw And &H80&) Then SwapEndian08 = SwapEndian08 Or &H80000000
End Function

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Public Function htons(ByVal lPort As Long) As Integer
    htons = ((((lPort And &HFF000000) \ &H1000000) And &HFF&) Or ((lPort And &HFF0000) \ &H100&) Or ((lPort And &HFF00&) * &H100&) Or ((lPort And &H7F&) * &H1000000) Or (IIf((lPort And &H80&), &H80000000, &H0)) And &HFFFF0000) \ &H10000
End Function

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #4 en: Octubre 25, 2012, 05:27:25 pm »
macro de C/C++ muy usada con el API SendMessage().

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Function makelParam(ByVal L As Integer, ByVal U As Integer) As Long
   Make_lParam = L Or (U * &H10000)
End Function

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #5 en: Octubre 25, 2012, 05:29:03 pm »
Recreacion de la funcion isNumeric(), empleando operaciones a nivel Bit
IsNumeric()

Variable lData..

Por que no usar Dim byData(3) as byte y quitar las mascaras de bytes?
R: Es mas lento, ¿por que?, me parece que es por que se involucra una multiplicacion aparentemente, o eso quiero creer, aun asi ya lo probe y si es mas leeeento.

Por que no usar otras 2 variables para que sea mas legible?
R: Es un ejemplo de como usar una variable tipo long para que la misma tenga distintos usos, no solo uno, ademas las mascaras son tan rapidas que no influyen en la velocidad.

Extructura de la variable lData

Para la explicacion veremos la variable de manera binaria:
0000 0000 0000 0000 0000 0000 0000 0000

0000 0000 => sección de 1 Byte donde se guarda el caracterleido con el API RtlMoveMemory().
0000 0000 => sección Flags de 1 Byte, se usa para guardar los Flags siguientes:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Const PUNTO_DECIMAL As Long = &H10000
Const SIGNO_SRC     As Long = &H20000
Const NUMBER_HEX    As Long = &H40000
Const NUMBER_OK     As Long = &H80000
Const NUMBER_POW    As Long = &H100000
Const NUMBER_POWF   As Long = &H200000
Const NUMBER_POWC   As Long = &H300000
Const NUMBER_FINISH As Long = &H400000


0000 0000 => sección 1 Byte (No tiene uso pero puede servir para continuar el conteo de la siguiente sección 0000 0000).

0000 0000 => sección 1 Byte, Se usa como contador sin signo con limite 2 potencia 8 es decir de 0 a 255 ( gracias a que el siguiente bloque 0000 0000 no se usa se puede expandir a 2 potencia 16 es decir 0 a 65535), se púso el contador en esta sección ya que la suma seria directa sin mascara alguna o algun tipo de dezplazamiento de bits y de esta manera NO MODIFICARIA los siguientes bloques de bytes.

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
lData = (lData + &H1)

 

¿Te gustó el post? COMPARTILO!



Funciones para marcar contornos de una imagen y marcar piel.

Iniciado por 79137913

Respuestas: 2
Vistas: 4062
Último mensaje Agosto 06, 2013, 08:30:58 am
por 79137913
Funciones en VB6

Iniciado por alexander1712

Respuestas: 0
Vistas: 1650
Último mensaje Enero 26, 2013, 03:09:54 am
por alexander1712