Ver Mensaje Individual
  #1  
Antiguo 23-09-2011
maunix maunix is offline
Miembro
 
Registrado: jul 2007
Posts: 10
Reputación: 0
maunix Va por buen camino
Exclamation Casteo y Migración

Buenos días, escribo el problema porque no he visto nada posteado al respecto y tampoco googleando veo alguna respuesta que cuadre en mi problema.

Tengo un código que anda de maravilas en Delphi 7 pero en Delphi Rapid XE y debuggeando paso a paso he encontrado el que parece ser mi problema.

Tengo una comunicación con un dispositivo de hardware y he usado siempre strings para enviar y leer de dicho positivo. La razon es porque la clase que lo controla usa strings; y de allí que yo también.

Ahora bien, yo creo buffers con strings, son pocos datos asi que me han funcionado siempre bien. En estos strings el 0 es un valor válido y no el fin del string; no obstante delphi nunca tuvo problemas con esto.

Si por ejemplo hago

Código:
str := chr(1) + chr(2) + chr(0) + chr(3) + chr(4);
Delphi me almacenara los 5 bytes y me dirá que el length(str) es de 5. Ahora bien los datos que van en el string pueden tomar un valor de 0 a 255; y es allí donde con el RapidXE noto un problema que me está volviendo loco.


Si hago

Código:
str := chr(127) ;
Lo hace bien

Pero si hago

Código:
str := chr(128);

Me asigna $0080 (128 en una variable de 16 bits).

Le he dado vueltas al problema y chr debiera devolver un valor de 8 bits no de 16 bits!! Este código en delphi7 lo hace perfecto.

Casteandolo como char, no ha solucionado el problema...

Lo único que me resta por probar es volver a trabajar con buffers de bytes y luego hacer la conversion (ya que como les mencionaba la clase que controla el dispositivo pide y responde con strings).

Lo que van entre parentesis son constantes, es decir que no son variables que se modifiquen en tiempo de ejecución. Casteandolas por ejeplo con byte(128) tampoco resuelve el problema..

¿Alguna idea?

Desde ya muchas gracias por anticipado.
Responder Con Cita