[C con Clase] como crear cadena de bytes?

Programante programante en gmail.com
Vie Mar 9 13:53:33 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);






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