2014-10-22 123 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; 
    } 
}