Ver Mensaje Individual
  #16 (permalink)  
Antiguo 04/10/2010, 20:08
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Convertir Numeros a Caracteres ASCII

Hola,

Cita:
Iniciado por cmarrero Ver Mensaje
Si vemos todo este codigo, vemos por ejemplo el primer valor a interpretar en ASCII..
"C±Ij" esto en comafloatente redondeado es algo asi como 355..

Bien ahora ese numero 355 que podemos interpretar es el nivel que tiene un canal...
Todavía no logro ver como esa serie de 4 bytes significa 355 en float. Cuando interpreto 'C┬▒I' dentro de un float no me da 355 ni cerca de ninguna forma, posiblemente es algo de interpretación de nuevo. Los float en la arquitectura de 32 bits se almacenan en 4 bytes.

Cita:
Iniciado por cmarrero Ver Mensaje
Bien asi de simple... ahora como puse antes, el valor ascii mencionado anteriormente primero lo convierto a Hexadecimal y luego lo convierto a comaflotante asi obtengo el numero que deseo...

Pero el tema esta en hacer la inversa, tomar el valor decimal, comvertirlo a coma flotante luego a hexadecimal y luego a ascii para guardarlos en un archivo que el PLC lea...
Veamos, solamente lo voy a mostrar con los primeros 4 bytes 'C┬▒I'.
Primero vamos a leer el archivo completo y mostramos los primeros 4 bytes 'C┬▒I'.
Código:
$data = file_get_contents('data.bin');
echo substr($data, 0, 4);
echo "\n";
Seguidamente convertimos en hexadecimal todo el archivo, y mostramos los primeros 8 caracteres que significan los 4 bytes en hexadecimal,
Código:
$datb = bin2hex($data);
$tempa = substr($datb, 0, 8);
echo $tempa;
echo "\n";
Ahora en $datb tienes todo el archivo en formato hexadecimal con el nibble alto primero, el nibble son 4 bits. Ahora convertimos de nuevo e imprimimos el resultado, que debería ser igual,
Código:
$f = pack('H*', $tempa);
print_r ($f);
El resultado te debería mostrar algo así por consola:
Código:
C┬▒I
43c2b149
C┬▒I
Es decir, los primeros 4 caracteres del valor leido, seguidos de su representación hexadecimal y finalmente su representación desde los valores hexadecimales, igual al primero.

Cita:
Iniciado por cmarrero Ver Mensaje
Puse lo de que 5.6051938572993E-44 era igual a 40, por que fue la prueba que hice con la funcion que abimaelrc me sugirio... entonces si esto es incorrecto la funcion esta mal o no hace lo que deberia hacer....
De nuevo creo que posiblemente es una cosa de interpretación,

Saludos,