Problema al guardar valores hexadecimales en archivo .bin ocupando 2 bytes

Iniciado por Fabricio, 29 Septiembre 2009, 22:20 PM

0 Miembros y 4 Visitantes están viendo este tema.

Fabricio

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


Karcrack

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

Fabricio

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  :-\

Karcrack

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...

Fabricio

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

Karcrack

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...

Fabricio

Ok gracias por eso el overflow
luego te cuento como me salio

gracias
saludos

ledred

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

MCKSys Argentina

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!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."