需要实现一个比较本机和服务器的安装包的版本新旧方法,参考
https://blog.csdn.net/ituring/article/details/6092411
但这个程序实现不了如
1.x.x 和 2.x.x
1.1.4 和 1.1.4.1
这种情况下的比较,做了些修改
/**
* @brief 版本号比较那个更新
* @param pszStr1 待比较的版本号
* @param pszStr2 待比较的版本号
* @retval >0:pszStr1更新
=0:相同
<0:pszStr2更新
例: "2.0.10.6" 与 "2.0.3.9"相比较的返回结果为7
"2.0.3.9" 与 "2.0.10.6"相比较的返回结果为-7
**/
static int edition_compare(const char* pszStr1, const char* pszStr2)
{
if (pszStr1 == NULL || pszStr2 == NULL) {
return 0;
}
int nCurPos = 0, nCapPos=-1;
const char* pszTmp1 = pszStr1;
const char* pszTmp2 = pszStr2;
while ((*pszTmp1 != '\0') && (*pszTmp2 != '\0') && (*pszTmp1 == *pszTmp2)) {
nCurPos++; //找到第一个处不相同出现的位置
pszTmp1++;
pszTmp2++;
if (*pszTmp1 == '.') {
nCapPos = nCurPos; //记录最近的‘.’的位置
}
}
if (*pszTmp1 == '\0' && *pszTmp2 == '\0') { // 两个字符串相等
return 0;
} else if(*pszTmp1 == '\0'){
return -1;
} else if(*pszTmp2 == '\0'){
return 1;
}else{ // 两个字符串不相等,比较大小
pszTmp1 = pszStr1 + nCapPos + 1;
pszTmp2 = pszStr2 + nCapPos + 1;
int pszNub1=strtol(pszTmp1,NULL,10);
int pszNub2=strtol(pszTmp2,NULL,10);
return (pszNub1 - pszNub2);
}
}