// Hallar len
int get_len(char* buffer)
{
char len[3];
int n;
if(find_string(buffer1,"+IPD")){ // +IPD,id,len:data
for(n=0;buffer[n]!=0;n++)
{
if(buffer[n]==',') // halla el primer "," y en mi caso siempre mínimo va hacer de 3 dígitos la longitud del buffer
{
len[0]=buffer[n+1];
len[1]=buffer[n+2];
len[2]=buffer[n+3];
}
}
return(atoi(len));
}
// Hallar data
void get_data(void)
{
char data[255];
int n;
if(find_string(buffer1,"+IPD")){ // +IPD,id,len:data
for(n=0;buffer[n]!=0;n++)
{
if(buffer[n]==':') // a partir del ":"
i=0;
do{ // Extraer ID del buffer a partir ":" y hasta \0.
data[i]=buffer1[n+1]; n++; //
}while(buffer1[++i]!=0x00); //
}
return(data);
}
Yo no se si siempre la respuesta es asi, si siempre es asi haria algo de esta forma:Código: C
get_datos(char* buffer) { char resultado[4][10]; int n,j=0,k=0; // Separo en comas for(n=0;buffer[n]!='\0',n++) { resultado[j][k++] = buffer[n]; if(buffer[n]==',') resultado[j][k]='\0'; j++; k=0; } resultado[j][k]='\0'; // Quedaria resultado[0] = "+IPD" , resultado[1] = id , resultado[2] = len:data // Separo en : k=0; j=3; for(n=0;resultado[2][n]!='\0',n++) { resultado[j][k++] = resultado[2][n]; if(resultado[2][n]==':') resultado[j][k]='\0'; j--; k=0; } resultado[j][k]='\0'; } // Quedaria resultado[0] = "+IPD" , resultado[1] = id , resultado[2] = data , resultado[3] = len
CREO que funciona xD, no te puedo decir a ciencia cierta ya que estoy re dormido xD
Te recomiendo dar un vistazo a la librería string.h Tiene unas cuantas funciones para tratar los string.
Por ejemplo STRCHR (string,','), te busca la primera , y te da su posición. Con STRRCHR (string,',') (Creo que se escribe así), te daría la posición de la última. Yo en alguna ocasión la he utilizado y es muy útil y universal, ya que aunque varíe el tamaño, sigue detectando en este caso las comas y te da su posición. Una vez que tienes su posición, únicamente copias la diferencia.
Saludos