Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Fabricio en 29 Septiembre 2009, 22:20 pm



Título: Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes
Publicado por: Fabricio en 29 Septiembre 2009, 22:20 pm
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
Código:
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



Título: Re: Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes
Publicado por: Karcrack en 29 Septiembre 2009, 23:04 pm
Tal vez asi...
Código:
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


Título: Re: Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes
Publicado por: Fabricio 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  :-\


Título: Re: Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes
Publicado por: Karcrack en 30 Septiembre 2009, 15:22 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...


Título: Re: Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes
Publicado por: Fabricio en 30 Septiembre 2009, 16:15 pm
Una mas ... esto de los numeros se me esta complicando  ;D ... como paso a hexa este numero 3502289056  :huh:
probe
Código:
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


Título: Re: Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes
Publicado por: Karcrack en 30 Septiembre 2009, 16:35 pm
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...


Título: Re: Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes
Publicado por: Fabricio en 30 Septiembre 2009, 17:11 pm
Ok gracias por eso el overflow
luego te cuento como me salio

gracias
saludos


Título: Re: Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes
Publicado por: ledred en 2 Febrero 2012, 19:24 pm
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


Título: Re: Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes
Publicado por: MCKSys Argentina en 2 Febrero 2012, 20:45 pm
Suponiendo que tienes un TextBox (Text1):

Código:
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!