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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)  (Leído 2,146 veces)
EddyW

Desconectado Desconectado

Mensajes: 187



Ver Perfil WWW
Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« en: 21 Agosto 2011, 22:18 pm »

Hola,

No pude pensar en un mejor título que describa el topic, lamento eso :P
Quiero realizar una resta de 2 números de 16 Bytes, pero es un UDT..
Código
  1. Private Type cD
  2.    A As Long
  3.    B As Long
  4.    C As Long
  5.    D As Long
  6. End Type
  7.  
  8. Private Type tStrg
  9.    tStrg As String * 8
  10. End Type
  11.  
  12. Private Sub Form_Load()
  13.    Dim One As cD, Two As cD, Res As cD
  14.    Dim LS As tStrg
  15.    LS.tStrg = "86420"
  16.    LSet One = LS
  17.    LS.tStrg = "6020"
  18.    LSet Two = LS
  19.    ' Aquí no se como restar ONE - TWO usando el UTD Res
  20.    ' El resultado se mostraría así ..:
  21.    With Res
  22.            ' Operaciones que no se como .¿?
  23.    End With
  24.    LSet LS = Res
  25. End Sub

Pensé en restar One.A con Two.A, y así sucesivamente, pero no funciona (De todas formas no tiene lógica para funcionar así),
No se si esto sirva, pero más o menos es lo que debería devolver:
Citar
  ONE       . TWO       . RES
A 3539000 . 3145782 . 3145784
B 3276852 . 3145778 . 3145780
C 2097200 . 2097184 . 2097200
D 2097184 . 2097184 . 2097184
  =86420  . =6020    . =80400
Más o menos creo que capta la idea ..
Alguna ayuda :P

SaluDOS!!!


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« Respuesta #1 en: 21 Agosto 2011, 22:55 pm »

pues...

Para hacer la resta debes pasar los strings a numero... (Ni siquiera te acercas a los numeros de la string).

Al hacer el LSET lo que andas haciendo es que SOLO COPIAS los bytes tal cuales de un UDT a otro UDT, es decir que tan solo el string "6420" es el numero "9007336695791664", es decir un numero de 8 Bytes (Double)... asi que la operacion matematica que tu planteas esta alocada...

Cada caracter de una string son 2 bytes es decir que en un tipo long solo caben dos caracteres... aun que esto creo que ya lo sabes por que en el UDT tStr creas un buffer adecuado a el UDT cD.

El metodo es mas complicado aun (Debes crear una funcion que sume).

Dulces Lunas!¡.


« Última modificación: 21 Agosto 2011, 23:06 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« Respuesta #2 en: 21 Agosto 2011, 23:20 pm »


Mirate este ejemplo d eloq ue digo, es complicado hacer una resta como la quieres hacer...

Código
  1.  
  2. Option Explicit
  3.  
  4. Private Type udtDouble
  5.    value As Double
  6. End Type
  7.  
  8. Private Type udtStr
  9.    value As String * 8
  10. End Type
  11.  
  12. Private Sub Form_Load()
  13. Dim One     As udtDouble, _
  14.    Two     As udtDouble, _
  15.    Res     As udtDouble
  16. Dim tStr    As udtStr
  17.  
  18.  
  19.    tStr.value = "8"    '1000 0000
  20.    LSet One = tStr
  21.  
  22.    tStr.value = "2"    '0010 0000
  23.    LSet Two = tStr
  24.  
  25.    Res.value = (One.value - Two.value) ' 1000 0000 - 0010 0000 = 11000000 = (192 >> 4) = 12
  26.    LSet tStr = Res
  27.  
  28.    Debug.Print tStr.value '= 192
  29.    Debug.Print Asc(tStr.value) '= 12
  30.  
  31. End Sub
  32.  
  33.  

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
EddyW

Desconectado Desconectado

Mensajes: 187



Ver Perfil WWW
Re: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« Respuesta #3 en: 21 Agosto 2011, 23:39 pm »

Precisamente estaba pensando en esos 2 Bytes, gracias por aclarar, me va ha servir tu ejemplo ;)
Tengo otra duda que me saltó, por que esto 'esta mal'?

Código
  1. Private Type bByte
  2.    L() As Byte
  3. End Type
  4.  
  5. Private Sub Form_Load()
  6.    Dim EJ As bByte
  7.    ReDim EJ.L(1 to 100) As Byte
  8.    MsgBox LenB(EJ) ' => 4 ¿o.O?
  9. End Sub

Supongo que es por que es una variable dinámica, pero ¿no hay forma?,

SaluDOS!!!
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Como realizo una resta en tipos definidos por el usuario? (Con LSet y uLong¿?)
« Respuesta #4 en: 21 Agosto 2011, 23:49 pm »

lo que pasa es que:

L() As Byte

Se trata como puntero a una structura SafeArray... que a su vez tiene un miembro pvData que apunta al 1er indice del array.

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines