Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Trabajar Con Bytes

Iniciado por [EX3], 06 de Octubre de 2004, 02:39:28 AM

« anterior - próximo »

Helius

 Es lo mismo, pero yo soy más cafre, en su día se me ocurrió en ASM  :P  
Geardome Devlog
Tutoriales sobre DirectX 9, Nintendo DS y PSP.

Trancos

 La forma más facil es declarar un puntero al dato del tipo que quieras y hacer casting. Lo que pasa es que no se copmo hacerlo en VB, sólo lo se hacer en C.

Tienes el buffer de 1024 bytes:

byte *buffer = new byte[1024];

Digamos que la posición es al inicio del buffer para no liar la marrana. Para castear al tipo int haces:

int *puntero = (int *)byte;

Lo que pasa es que no se si VB te permite hacerlo. Creo que deberías trabajar en C/C++ si vas a estar trabajando directamente sobre la memoria.

Si no puedes hacer esto no te queda más remedio que recurrir al álgebra, leyendo los 4 bytes por separado y haciendo la siguiente operación:

numero = byte 1 + byte 2 * 256 + byte 3 * 65536 + byte 4 * 16777216

Trancos

 donde puse:

int *puntero = (int *)byte;

era:

int *puntero = (int *)buffer;

perdón  (nooo)

[EX3]

 
Cita de: "Huevox"numero = byte 1 + byte 2 * 256 + byte 3 * 65536 + byte 4 * 16777216
Yo alucino en colores, llevo dias intentando aplicar esta formula similar ke me paso mi colega y no me funcionaba, ahora me ha dado por probarla de coña y casi boto de la silla cuando he visto ke me ha devuelto el valor correcto!!  (uoh)

Ahora solo me falta averiguar como leer/escribir valores Single/Float ke me imagino ke sera mas o menos similar ya ke tb son 4 bytes.

Muchas Gracias a todos por la ayuda  (ole)

Salu2...

P.D.: Tambien me dado cuenta que he colgado el post en el general de Stratos en vez del foro de programacion, ha sido un lapsus  :P  
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

herman

 el formato de los numeros de coma flotante es bastante lioso:

S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF

el bit S representa el signo, los 8 bits E representan el exponente y los restantes bits son la fraccion. Si quieres obtener el numero que representa debes hacer lo siguiente:

solamente si 0
si E es 0 o 255(11111111) esta formula no sirve, y tienes que seguir otros criterios, que no me acuerdo. Espero que te ayude.
 may have Alzheimer's but at least I don't have Alzheimer's

[EX3]

 Vale, me acabo de dar cuenta hoy de que la formula que use para lectura de LONG falla al desbordarse la variable al leer un numero negativo y al realizar el paso contrario, osea, en vez de lectura escritura, al interpretar el 2º byte tb se desborda.

Demasiados lios, creo ke me decanto o por hacer mi propio formato y guardarlo asi en el array de bytes o seguir utilizando el array de Variants facilitando el trabajo entre VB y el motor script que usa VBS al no hacer conversiones pero haciendolo jodido si un dia me da la vena y quiero pasar el codigo a C++ por ejemplo, o crear el buffer en un archivo en disco y leer y escribir en el mediante las funciones Get y Put del propio lenguaje.

No pense que esto me fuera a traer tantas complicaciones  :(

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

sés

Cita de: "[EX3"] Vale, me acabo de dar cuenta hoy de que la formula que use para lectura de LONG falla al desbordarse la variable al leer un numero negativo y al realizar el paso contrario, osea, en vez de lectura escritura, al interpretar el 2º byte tb se desborda.
Esa una de las razones por las que se realiza con desplazamientos. Otra es la velocidad.
Soy indeciso... ¿o no?

fiero

 EX3 ¿en VB hay desplazamientos? Es que yo me quedé en el qbasic y no me acuerdo. ES mejor que te acostumbres a desplazar, en vez de multiplicar por potencias de 2, como dice sés

un saludo
www.videopanoramas.com Videopanoramas 3D player

Pogacha

 Casi que te recomendaria que aprendas C.

[EX3]

 
Cita de: "fiero"EX3 ¿en VB hay desplazamientos?
Weno, yo eske aun hay cosas ke solo conozco de oidas y ke ni si kiera se ke son y si algunas vez las he tocado, esto me pasa por programar en lenguajes como BASIC o VB en mi caso  <_<  
Podriais explicarme lo ke seria un Desplazamiento?

Pogacha, aprender C es la mejor solucion ke me dan, pero kitando algunas historias ke tengo me sigue saliendo mas comodo programar en VB, al menos por el momento  :rolleyes:

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Sacrifai

Cita de: "[EX3"] Podriais explicarme lo ke seria un Desplazamiento?
Pues yo no soy muy especialista en trabajar con bytes, pero creo que e refiere a mover un byte a otro.

BeRSeRKeR

 Parece que en Visual Basic no existe un operador de desplazamiento de bits. A ver si este artículo te ayuda en algo.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Mars Attacks

 00011001 << 2 = 01100100 (desplazamiento a izquierdas)

01011000 >> 2 = 00010110 (el desplazamiento a derechas tiene varios tipos, dependiendo de si arrastra bit de signo o no).

[EX3]

 Vale ya me he hecho una idea, por cierto, BeRSeRKeR, leyendo el articulo que me has recomendado he visto que las funciones descritas en codigo Basic, LShifWord() y RShiftWord(), las he visto en el codigo de un programa escrito en VB que baje hace algun tiempo, por eso comente que me sonaba de algo lo de Desplazamientos de Bytes pero no acertaba a saber si era en VB, gracias por el articulo  :)

De momento creo que lo del buffer de intercambio para el script lo seguire haciendo mediante un array de Variants, por que programar funciones para trabajar solo con enteros (WORD/DWORD) y caracteres (CHAR), pero no con decimales (FLOAT), a nivel de bytes no me valdria y seria dejar el proyecto cojo, aunque si algun dia logro hacerlo solo tendria que cambiar un modulo de codigo en el proyecto y listo, asi que tampoco hay mucho problema  :)

Gracias a todos por la ayuda.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

sés

 No estoy seguro, pero... ¿VB no tiene operadores booleanos? Con eso creo que te serviría.
Soy indeciso... ¿o no?






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.