Ver Mensaje Individual
  #10 (permalink)  
Antiguo 04/10/2010, 07:51
cmarrero
(Desactivado)
 
Fecha de Ingreso: enero-2008
Ubicación: Mendoza
Mensajes: 458
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Convertir Numeros a Caracteres ASCII

Pues ahora te comento.... cual es todo mi rollo...

Tengo un archivo llamado niveles.log que tiene el siguiente contenido:

niveles.log:
C¾› L/segMontecs QC*Dõ L/segSet Point Q% Norte QDŒ^õ L/seg Sur QDá=× L/seg Saavedra Qmts Sarramea Qmts Error CONTACTOR 1 Error CONTACTOR 2 Corrig. MontecaserosCorrig. Alto Verde Corrigiendo caudal, Error MAX IZQUIERDA Error MAX DERECHA Modo MANUAL Error excede los li_mites. Pase a MANUALPor Favor espere... Proximo error a cor_regir= QÃ*Dõ

Este archivo siempre es de 463 bytes, sin importar su contenido, o sea, los valores dentro pueden cambiar incluso hasta puede estar vacio pero siempre tiene 463 bytes... (desconozco el motivo)...

Lo que hago es pasar todo el contenido a hexadecimal... con esta funcion:

Código PHP:
function ascii2hex($ascii) {
    
$hex '';
    for (
$i 0$i strlen($ascii); $i++) {
    
$byte strtoupper(dechex(ord($ascii{$i})));
    
$byte str_repeat('0'strlen($byte)).$byte;
    
$hex.=$byte."";
    }
return 
$hex;

Y con esto abro el archivo y leeo solo lo que que quiero de esos datos....

Código PHP:
$fp fopen('niveles.log','rb');
$read fread($fp,463);
fclose($fp);

$h ascii2hex($read);
$matriz $h[0].$h[1].$h[2].$h[3].$h[4].$h[5].$h[6].$h[7];
$montecaseros $h[40].$h[41].$h[42].$h[43].$h[44].$h[45].$h[46].$h[47];
$norte $h[116].$h[117].$h[118].$h[119].$h[120].$h[121].$h[122].$h[123];
$sur $h[152].$h[153].$h[154].$h[155].$h[156].$h[157].$h[158].$h[159];
$setPoint $h[84].$h[85].$h[86].$h[87].$h[88].$h[89].$h[90].$h[91];
$error $h[918].$h[919].$h[920].$h[921].$h[922].$h[923].$h[924].$h[925]; 
Esto esta perfecto, funciona de maravillas... lo que hago luego de tomar estos caracteres (que solo tomo los valores ascii de la cadena), los paso a como floatente de la siguiente manera:

Código PHP:
function comaFlotante($val){
    
$entero hexdec($val);
    
$ascci pack('i'$entero);
    
$float unpack('f'$ascci);

return 
$float[1];
}

$matriz comaFlotante($matriz);
$montecaseros comaFlotante($montecaseros);
$norte comaFlotante($norte);
$sur comaFlotante($sur);
$setPoint comaFlotante($setPoint);
$error comaFlotante($error); 
y listo, esto luego lo guardo en un tabla en mi base de datos...

pero ahora tengo que hacer la inversa para uno de esos datos y es el "setpoint"

O sea... tengo que escribir en un archivo llamado setpoint.txt los valores ascii para que un PLC los lea...

Por ejemplo el usuario escribe en un campo : 40,5 o tambien 40 o cualquier numero decimal...

Esto lo tengo que llevar a la misma conversion ascii que lei al principio... entonces este es mi dilema...

Espero que me hayas entendido....