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..
Private Type cD
A As Long
B As Long
C As Long
D As Long
End Type
Private Type tStrg
tStrg As String * 8
End Type
Private Sub Form_Load()
Dim One As cD, Two As cD, Res As cD
Dim LS As tStrg
LS.tStrg = "86420"
LSet One = LS
LS.tStrg = "6020"
LSet Two = LS
' Aquí no se como restar ONE - TWO usando el UTD Res
' El resultado se mostraría así ..:
With Res
' Operaciones que no se como .¿?
End With
LSet LS = Res
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!!!
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!¡.
Mirate este ejemplo d eloq ue digo, es complicado hacer una resta como la quieres hacer...
Option Explicit
Private Type udtDouble
value As Double
End Type
Private Type udtStr
value As String * 8
End Type
Private Sub Form_Load()
Dim One As udtDouble, _
Two As udtDouble, _
Res As udtDouble
Dim tStr As udtStr
tStr.value = "8" '1000 0000
LSet One = tStr
tStr.value = "2" '0010 0000
LSet Two = tStr
Res.value = (One.value - Two.value) ' 1000 0000 - 0010 0000 = 11000000 = (192 >> 4) = 12
LSet tStr = Res
Debug.Print tStr.value '= 192
Debug.Print Asc(tStr.value) '= 12
End Sub
Dulces Lunas!¡.
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'?
Private Type bByte
L() As Byte
End Type
Private Sub Form_Load()
Dim EJ As bByte
ReDim EJ.L(1 to 100) As Byte
MsgBox LenB(EJ) ' => 4 ¿o.O?
End Sub
Supongo que es por que es una variable dinámica, pero ¿no hay forma?,
SaluDOS!!!
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!¡.