Hola a todos tengo el siguiente problema... tengo que guardar datos en un archivo .bin (ej : pepe.bin) en donde cada dato que voy a guardar tiene un nombre, tipo y ocupa cierta cantidad de bytes dentro del archivo ej :
nombre: tamaño: tipo de datos:
cantidad 2 bytes binario LSB-MSB
el problema que me surge es que al leer la cantidad de la BD (tipo de dato integer) lo debo pasar a hexa luego swapearlo y guardar esos valores ocupando solo 2 bytes
Pd: para abrir el archivo y ver como se guardaron los datos guardados uso el UEStudio (UltraEdit)
ej
Private Sub Form_Load()
Dim cantidad As Integer
Dim cantHexa As String
Dim a As String
Dim b As String
cantidad = 6871 'lo paso a hexa
cantHexa = Hex(6871) 'y da "1AD7" que es un dato de tipo string
'ahora debo guardarlo swapeado y solo ocupando 2 bytes
a = Right(cantHexa, 2) 'D7
b = Left(cantHexa, 2) '1A
Open "D:\pepe.bin" For Binary As #1
Put #1, 1, a 'D7
Put #1, 2, b '1A
Close #1
End Sub
El problema :-( que tengo es que este codigo me guarda 44 31 41 en tres bytes (valor hexa de D, el de 1 y el de A el 7 se pisa porque A1 me ocupa 2 bytes ) esto lo veo usando el UEStudio conmutando a modo hexa
Lo que yo deseo guardar es D7 (no 44 37) ocupando un solo byte y 1A (no 31 41) ocupando un solo byte o sea que cuando uso el UeStudio en modo hexa vea D7 y 1A ocupando solo 2 byte
Bueno se hizo largo por que trate de ser lo mas claro posible
Espero que se entienda :huh:
Un gran saludo
Tal vez asi...
Private Sub Form_Load()
Dim cantidad As Integer
Dim cantHexa As String
Dim a As byte
Dim b As byte
cantidad = 6871 'lo paso a hexa
cantHexa = Hex(6871) 'y da "1AD7" que es un dato de tipo string
'ahora debo guardarlo swapeado y solo ocupando 2 bytes
a = CByte("&H" & Right(cantHexa, 2)) 'D7
b = CByte("&H" & Left(cantHexa, 2)) '1A
Open "D:\pepe.bin" For Binary As #1
Put #1, 1, a 'D7
Put #1, 2, b '1A
Close #1
End Sub
Funciono perfecto muchas gracias Karcrack :D
me podes aclarar como funciona el "&H" a = CByte("&H" & Right(cantHexa, 2))
por que yo habia probado cantHexa = &HcantHexa pero no me funciono
muchas gracias
un saludo :-\
Cita de: fabricioAngel en 30 Septiembre 2009, 14:27 PM
Funciono perfecto muchas gracias Karcrack :D
me podes aclarar como funciona el "&H" a = CByte("&H" & Right(cantHexa, 2))
por que yo habia probado cantHexa = &HcantHexa pero no me funciono
muchas gracias
un saludo :-\
El '&H' indica a la funcion CByte que es un numero hexadecimal...
Una mas ... esto de los numeros se me esta complicando ;D ... como paso a hexa este numero 3502289056 :huh:
probe
dim a as double
dim b as string
a = 3502289056# ' el # me lo pone VB y no lo puedo borrar
b = Hex(a)
esto me da desbordamiento
yo quiero obtener D0C0B0A0
gracias
saludos
Con ese numero te pasas del tamaño del Long...
Para ser exacto estas poniendo un Double... para sacar el Hex de eso tienes que ir leyendo la memoria y ir byte por byte metiendo el valor Hexadecimal...
Ok gracias por eso el overflow
luego te cuento como me salio
gracias
saludos
Hola y como le puedo poner un text1 para que yo ingrese manualmente el numero hex gracias
cantHexa = Hex(6871) 'y da "1AD7" que es un dato de tipo string
Suponiendo que tienes un TextBox (Text1):
Dim cantHexa as long
cantHexa = Clng("&H" + Text1.text)
Solo debes verificar que el largo del TextBox no cree un overflow y ademas que tenga caracteres correctos: 0..9, A..F
Saludos!