2014-10-22 132 views
0

我有一個UDP套接字服務器和客戶端設置在客戶端請求來自服務器的一些信息,發送在字符的形式的請求數組,它包含分別是字符串,int和int的[ID,「」,choice,「」,request]。我需要能夠將這三個參數從數組中解析出來,以訪問我的數據庫以發回正確的信息。到目前爲止,我已經使用了一段時間循環通過這些解析試過,但不幸的是這不是working.any建議,以更好的解決方案,工程?第一個int將是一位數字,然而第二個可以是長的。用C解析「字符串」(char數組)爲字符串,整數和int

char *idToCheck; 
int k = 0; 
while(strcmp(messBuffer[k]," ") == 1){ 
    idToCheck += messBuffer[k]; 
} 
int choice = messBuffer[k++]; 
int request; 
while(strcmp(messBuffer[k],"\0") == 1){ 
    ???? 
} 
+0

目前尚不清楚您的數據是如何編碼的。包中的整數是否也是字符串,還是二進制值?如果是這樣,大小?你應該顯示你想要解析的UDP負載的十六進制轉儲。 – 2014-10-22 03:55:40

+0

讀取整個消息(一定要得到的所有消息)到本地緩衝區,然後使用類似的sscanf()來解析出三個項目爲單個變量。 – user3629249 2014-10-22 10:25:01

+0

user36 ......你確實有完美的答案我一直在尋找。超級簡單和超級真棒!我希望我能讓你的答案正確 – user3704079 2014-10-22 20:52:36

回答

0

有幾件事情:

  • 你需要有idToCheck點或被限定爲具有一定的存儲。
  • 不要使用STRCMP比較字符 - 只使用==

這樣如何開始你出去 - 假設標識將不得超過MAX_ID_LEN。

#define MAX_ID_LEN 80 
char idToCheck[MAX_ID_LEN] 
int i; 

for (i = 0; i < MAX_ID_LEN; i++) { 
    if (messBuffer[i] != ' ') { 
     idToCheck[i] = messBUffer[i]; 
    } 
    else { 
     break; 
    } 
}