[C con Clase] como crear cadena de bytes?

J HU judowold en hotmail.com
Vie Mar 9 14:03:56 CET 2007


>J HU escribió:
> > Hola gente!
> >
> > Al igual es una pregunta un tanto tonta, pero a ver si alguien puede 
>echarme
> > una mano.
> >
> > El caso es que quiero concatenar en un variable del tipo "unsigned 
>char*"
> > varios bytes.
> >
>¿Por qué unsigned ?  Para enviarlo por el socket te da igual que sea
>unsigned o signed, y te ahorras unos cuantos casts.
>
> > Por ejemplo algo como esto:
> >
> > unsigned char* buf;
> > int i=0,j=1;
> > char* str="Cadena";
> >
> > asprintf((char*) buf,"%d%d%s",i,j,str);
> >
>Me parece que aquí debería ser asprintf((char**) &buf,"%d%d%s",i,j,str);
> > Con esto lo aue quiero es crear una cadena de bytes que luego pueda 
>enviar
> > por un socket, pero mi problema esta en que no me crea la cadena de 
>bytes
> > corretamente ya que en el buffer me pone el valor ascii de los numeros 
>que
> > contiene i y j y no el valor en bytes, es decir, que en lugar de poner 
>"00
> > 00 00 01", me escribe "31", en lugar de 4 bytes, pone 1 byte.
> >
>Es lo que hace la familia printf con %d. Podrías usar %c, pero eso solo
>te sirve para un byte.
> > Entonces la otra manera que he visto de hacerlo es usando la funcion
> > "memcpy", pero me resulta un poco mas "costoso" poraue tengo q insertar 
>uno
> > a uno. Ejemplo:
> >
> > buf = (unsigned char*) malloc(4+4+6);
> > memcpy(buf,i,4);
> > memcpy(buf+4,j,4);
> > memcpy(buf+8,str,6);
> >
> > Assi si me escribe correctamente los bytes, pero resulta algo mas 
>"complejo"
> > de escribirlo.
> >
>Es la forma adecuada, copias la representación en memoria
> > Entonces, alguien podria decirme si hay alguna manera de hacerlo mas 
>simple?
> >
>Podrías usar un struct para simplificar el sistema:
>struct EnterosYCadena {
>  int i;
>  int j;
>  char str[1];
>}* buf;
>int tamano = sizeof(struct EnterosYCadena) + strlen(str);
>buf = malloc(tamano);
>
>buf->i = i;
>buf->j = j;
>strcpy(buf->str, str);
>
>send(socket, buf, tamano);

Si es correcto, asi es como la tenia, tenia creada una estructura de tama~no 
fijo y no habia problema, pero debo cambiarle a una dinamica y necesito 
"serializarla", pasarla a un array de bytes antes de enviarla...

struct EnterosYCadena {
  int i;
  int j;
  char *str;
  int longStr;
}* buf;

Entonces es con algo como esta estructura con la que tengo problemas...

De todas formas, se agradece mucho tu respuesta en serio :). Gracias.

Si alguien tiene alguna otra idea :).

Un saludo!

_________________________________________________________________
Descubre la descarga digital con MSN Music. Más de un millón de canciones. 
http://music.msn.es/





Más información sobre la lista de distribución Cconclase