2017-03-22 119 views
0
unsigned short octet2, octet3, octet4; 
sscanf(ipAddr.c_str(), "%hu.%hu.%hu.%hu", &octet2, &octet2, &octet3, &octet4); 

ipAddr是一个字符串。将IP地址分成八位字节,但用sscanf跳过第一个八位字节

从上面的代码,它成功地打破了八位组。但是,我想避免触摸IP地址的第一个八位字节。我想避免两次写入octet2的额外操作。

例如,IP地址为1.2.3.4,我会打破了IP地址为2,然后是3,然后是4而不触及1

我的业务将超过一百万次完成,除非有一个比sscanf更好的方法,请让我知道。

+0

有你尝试这个'sscanf(ipAddr.c_str(),“%* hu。%hu。%hu。%hu”,&octet2,&octet2,&octet3,&octet4);'*是在读取值 –

+1

后忽略它什么问题? –

+0

问题是'&'而不是'%'... –

回答

3

你可以扫描而是由*前缀第一格式说明符的第一个参数不能储存告诉sscanf解析,但不存储领域(而你只需要在这种情况下,3个参数):

sscanf(ipAddr.c_str(), "%*hu.%hu.%hu.%hu", &octet2, &octet3, &octet4); 
相关问题