Comunidad de diseño web y desarrollo en internet online

string terminado en null en un byteArray

Citar            
MensajeEscrito el 23 Mar 2007 11:34 pm
Buenas,
estoy leyendo una parte de un paquete binario proviniente de una petición a un servidor.
Dicha parte del paquete es un string que leo con readUTFBytes().
La cuestión es que para detectar el final de este string tengo que analizarlo byte a byte en un loop hasta encontrar el caracter null (también representado como \0 o 0x00) para así romper el loop ahí.
¿ Como se representa el caracter null en AS3 ?
En realidad necesito poder hacer algo así:

Código :

private function socketDataHandler(event:ProgressEvent):void 
{
   var server_version:String = "";// será un string de menos de 50 caracteres
   var cnt:int = 0;//contador por si me paso que no se genere un loop infinito
   do{
      var char:String = readUTFBytes(1);
      trace ( "char#"+ char +"#"+ char.charCodeAt(0) +"#" );
      server_version += char;
      if(cnt++ > 50)
      {
         trace("uy uy uy ... loop de la muerte...")
         break;
      }
   }
   while( server_version.charAt(server_version.length-1) != String(0x00) );
   trace ( "# server_version: "+ server_version );
}


Gracias!

Por Joan Garnet

5 de clabLevel



 

Barcelona

firefox
Citar            
MensajeEscrito el 24 Mar 2007 02:42 pm
Hola

Nose mucho de AS3, pero si estas manejando paquetes binarios, supongo q estaras enviando una cierta info en los primeros 4 byets, en los siguientes 10 otro dato y asi.... si son todas string, podes poner el \0 como caracter separatorio y al recibirlo en el flex podras meterlo dentro de un string y hacerle un split....

Por otro lado... si siempre el final de la cadena es el \0 podes hacer substr desde el caracter 0 al .length -1 y listo...

Espero q te sirva la ayuda....

saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 24 Mar 2007 03:00 pm
Hola

Leyendo bien, veo q estas usando sockets, mira lo mejor es antes de enviar el mensaje enviar una cabecera (header) indicando el tipo de mensaje y el tamaño del cuerpo q vendra despues. Este "header" lo podes enviar antes en un mensaje separado o en el mismo mensaje en los primeros n bytes (siempre el header del mismo tamaño).

De esta forma sabras como tenes q manejar la informacion. Talvez te convenga armar un protocolo de mensajes (y el orden de enviar/recibir los mismos) comun entre flash/flex y el servidor, asi sabes q hacer con cada mensaje...

Igualmente te digo esto sin saber que tipo de aplicacion estaras haciendo... y ademas segurametne ya lo sabias jejeje

saludos!

PD: por otro lado, supongo q el \0 (NULL) el as3 lo maneraja como "undefined" (es solo una suposicion)

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 24 Mar 2007 04:14 pm
Hola alfathenus, gracias por responder.
Como bien dices estoy utilizando la clase Socket.
Finalmente parece ser que encontré como representar el caracter \0 en AS3.
Tu respuesta me hizo acercarme a la solución.

En AS3 no se puede definir un String como undefined, así que leyendo acerca del tema vi que si defines un String vacío éste tiene el valor null ( que no es lo mismo que String(null) ni new String(null) ).
Simplemente definiendo un nuevo String sin valor así:

Código :

var string_null:String = new String();

obtienes el valor \0

Gracias!

Por Joan Garnet

5 de clabLevel



 

Barcelona

firefox
Citar            
MensajeEscrito el 24 Mar 2007 07:40 pm
Buenisimo!

Ahi ya tenes para hacer la comparation :cool:

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.