我想从C中的HTTP Get请求中提取一些数字。 例如,如果我的HTTP请求是:
GET /getUIKVal?mdn=9860436150 HTTP/1.1
Host: api.end.point
我希望将号码9860436150打印为输出。 我已经尝试过sscanf()和atoi()
答案 0 :(得分:1)
您可以像下面一样简单地使用sscanf
。
char* line = "GET /getUIKVal?mdn=9860436150 HTTP/1.1";
long long val ;
int ret = sscanf(line, "%*[^=]=%lld",&val);
printf("%lld\n", val) ;
%*[^=]=
将在哪里读取并丢弃字符串,直到到达=
并且%ld
将在val
中读取实际数字。
答案 1 :(得分:0)
您可以使用strstr
来识别标记mdn=
,然后扫描数字或字符串。请注意,扫描号码不需要复制相应的内容。下面的代码显示了如何:
const char* content = "GET /getUIKVal?mdn=9860436150 HTTP/1.1";
const char* startOfNumber = strstr(content,"mdn=");
if (startOfNumber) {
startOfNumber += strlen("mdn=");
long number;
if (scanf("%ld",&number)==1) {
printf("the number is... %ld", number);
} else {
printf("no valid number after 'mdn='");
}
} else {
printf("marker 'mdn=' not found.");
}
实际上,我更喜欢strstr
解决方案,而不是scanf
标识标记和数字的解决方案,因为那时很难推理语法错误。