C новичка: разбор строки - PullRequest
       1

C новичка: разбор строки

6 голосов
/ 06 декабря 2011

Я пытаюсь разобрать следующий HTTP-ответ:

HTTP/1.1 200 OK
Date: Tue, 06 Dec 2011 11:15:21 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.3.2-1ubuntu4.9
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 48
Content-Type: text/html

��(�ͱ���I�O����H�����ч��
                      �4�@�B�$���S

Я хочу извлечь "48" и двоичное содержимое.

Вот что я попробовал, софар:

  //char* str contains the response
  char * pch;
  printf ("Splitting response into tokens:\n");
  pch = strtok (str,"\r\n");
  while (pch != NULL)
  {
      printf ("%s\n",pch);
      pch = strtok (NULL, "\r\n");
  }

Но я как бы застрял ... Любая помощь очень ценится.


редактирование:

Вот что я сделал, софар:

char* pch;
char* pch2;
pch=strstr(buf,"Content-Length:");
pch2=strstr(pch,"\r\n");

Как я могу получить бит между этими двумя указателями?


Редактировать: решение:

        char* pch;
        char* pch2;
        pch=strstr(buf,"Content-Length:");
        int i=0;
        char contLen[20];
        for(i=0;i<20;i++){
                char next=pch[strlen("Content-Length:")+i];
                if(next=='\r' || next=='\n'){
                        break;
                }
                contLen[i]=next;
        }
        printf("%d\n",atoi(contLen));

Ответы [ 2 ]

6 голосов
/ 06 декабря 2011

Почему бы вам не поискать строку "Content-Length:"?затем с этой точки двигайтесь вперед.

Вы можете использовать strstr () , чтобы найти точку в str , затем переместить указатель на символ вперед strlen ("Content-Length: ") позиции, затем считайте значение, используя atoi ()

, нет необходимости маркировать всю строку

2 голосов
/ 06 декабря 2011

Попробуйте это:

const char* http_header = 
"HTTP/1.1 200 OK\r\n" \
"Date: Tue, 06 Dec 2011 11:15:21 GMT" \
"Server: Apache/2.2.14 (Ubuntu)\r\n" \
"X-Powered-By: PHP/5.3.2-1ubuntu4.9\r\n" \
"Vary: Accept-Encoding\r\n" \
"Content-Encoding: gzip\r\n" \
"Content-Length: 48\r\n" \
"Content-Type: text/html\r\n\r\n" \
"mydata";

// will point to start of data
char* pdata = strstr((char*)http_header,"\r\n\r\n");
    // will point to start of 'Content-Length' header
char* pcontent = strstr((char*)http_header,"Content-Length:");
    // get the length of the data
int value = atoi(pcontent+15);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...