Foro sobre Java SE > Valor decimal U32 o S32 a ASCIIZ
U32: decimal sin signo
S32: decimal con signo
ASCIIZ: ASCII terminado en null
¿Qué SDK es ese?
Guenas.
Quizá lo que te esta devolviendo es la posición de memoria en la que se encuentra la cadena ASCIZ que debes leer, es decir un puntero a char.
Un saludo
El SDK es FSUIPC, es para Microsoft Flight Simulator.
Gracias chicos por vuestras respuestas, pero sigo igual de perdido.
Sigo investigando.
Muchas gracias.
Un saludo.
FSUIPC_Read (&H3D00,256,VarPtr (b(0))) => Lee 256 bytes del offset de memoria 3D00 y los almacena en la variable b(0)
FSUIPC_Process => A saber lo que hace
For i=0 to 255... Lee los bytes que ha almacenado en el array de caracteres b y los imprime uno a uno como char.
Como estas accediendo a este sdk con Java? Con JNI?
He probado a convertir la secuencia numerica que obtengo con (char), pero no sale nada parecido a lo que debe salir.
Nos puedes ensenar como es el codigo con el que has hecho esto?
Un saludo
Por lo que he visto, hay una librería para Java (incluida en la distribución de ese SDK); pero es necesario compilarla, aparte de compilar un código fuente en C, que debe incluirse con esa librería, y al que se accede mediante JNI.
¿Es esa la librería que intentas usar?.
package aeronave;
import com.flightsim.fsuipc.FSUIPC;
import com.flightsim.fsuipc.fsuipc_wrapper;
public class Aeronave {
public static int conexion;
public static String offset;
public static void Datos() {
conexion = fsuipc_wrapper.Open(fsuipc_wrapper.SIM_ANY);
FSUIPC fsuipc = new FSUIPC();
offset = Integer.toString(fsuipc.getInt(0x3d00));
fsuipc_wrapper.Close();
}
public static void main(String[] args) {
Datos();
for (int i = 0; i < offset.length(); i++) {
System.out.println((char)offset.charAt(i));
}
}
}
La parte negrita es lo que no tengo nada claro.
Un saludo
Choces, la libreria esta incluida en el proyecto, sin ella la conexion no es posible y esa parte funciona correctamente.
Muchas gracias.
Un saludo.
Por la API del wrapper que he visto en google code:
https://code.google.com/p/gdju/source/browse/trunk/src/gc/app/src/com/gerbildrop/gc/jni/FsuipcWrapper.java?r=73
Seria mas bien algo como
byte[] data;
conexion = fsuipc_wrapper.Open(fsuipc_wrapper.SIM_ANY);
conexion.readData(0x3d00, 256, data);
conexion.process();
for (int i = 0; i < data.length(); i++) {
System.out.println((char)data[i]);
}
Un saludo
Perdon, la primera linea seria:
byte[] data = new byte[256];
Y el readData:
conexion.readData(0x3d00, 255, data);
Suerte
Vaya, te lo pongo bien:
byte[] data = new byte[256];
conexion = fsuipc_wrapper.Open(fsuipc_wrapper.SIM_ANY);
fsuipc_wrapper.readData(0x3d00, 255, data);
fsuipc_wrapper.process();
for (int i = 0; i < data.length(); i++) {
System.out.println((char)data[i]);
}
UnoPorAhi, no te beso porque no llego, eso ha estado perfecto, ha funcionado perfectamente bien.
Un millon de gracias.
Un saludo.
Me alegro de que te funcione!
Un saludo
Hola a todos:
A ver como me explico para que me entendais.
Estoy usando un SDK de una aplicación con sus correspondientes offsets, y uno de ellos se supone que me debe de dar un nombre y sin embargo el resultado que obtengo es numerico.
He consultado la informacion del SDK y otras fuentes pero sigo sin entender nada.
Por lo visto el resultado que obtengo es este "1936942403" y deberia obtener esto "Cessna Skyhawk 172SP". Bien según he visto el dato que obtengo es una Valor decimal S32 o U32, que no se que es, y el que debo obtener es un ASCIIZ que tampoco tengo ni idea que es.
Parace que hay alguien que en Visual Basic lo consigue utilizando este código:
Dim b(255) as byte 'defined a byte array (256 values)
Dim result as string 'will contain the final result
Dim i as integer
FSUIPC_Read (&H3D00,256,VarPtr (b(0))) 'read all bytes at offset 3D00 in byte array
FSUIPC_Process
For i=0 to 255
If b(i)=0 then exit for 'leave at last char
result=result+Chr(b(i)) 'otherwise adds to result (don't forget the Chr)
Next
Soy novato en JAVA pero en VB ni Jota.
He probado a convertir la secuencia numerica que obtengo con (char), pero no sale nada parecido a lo que debe salir.
Si alguien entiende algo de todo esto y es tan amable de arrojar algo de luz a mi oscuridad, estare eternamente agradecido.
Un saludo.