在軟件實現更新模塊的時候,有可能會判斷一下服務器上的版本的版本號和本地版本的版本號。
下面有類似這樣形式的版本號:string str = "0.0.0.1";
分析一下可以看出,該版本號可以分為4個部分,下面就實現一個提取這4部分的功能函數:
1 //通過string 參數獲取版本號到version數組內 2 //該函數是通過"."來分別獲取4個整形值的 3 //所以允許出現類似: "1000.20.3.5" 4 5 void GetVersion(string str,int *version) 6 { 7 string st1(""); 8 int j = 0; 9 for (int i = 0;i< str.size();i++) 10 { 11 if (str[i] == '.') 12 { 13 version[j++] = atoi(st1.c_str()); 14 st1 = ""; 15 }else 16 { 17 st1 += str[i]; 18 } 19 } 20 version[j++] = atoi(st1.c_str()); 21 } 22 23 ////////////////////////////////////////////////////////////////////// 24 25 string strServerListVersion = "0.0.0.2 ";//服務器版本的版本號 26 string strLocVersion = " 0.0.0.1";//本地版本的版本號 27 int serverVersion[4] = {0}; 28 int locVersion[4] = {0}; 29 30 31 GetVersion(strServerListVersion ,serverVersion); 32 33 GetVersion(strLocVersion ,locVersion); 34 35 36 //比較兩個版本 37 int k = memcmp(locVersion,serverVersion,4); 38 if (k == 0) 39 { 40 //版本相等 41 42 }else if (k < 0) 43 { 44 //服務器版本高 45 46 47 }else 48 { 49 //服務器版本低 50 }
功能不復雜,有用到類似版本號比較判斷的,就可以直接拿走就可以用。
之所以把獲取的4個表示版本的值放在數組內,是為了更進一步的開發,比如升降版本:從1.5一下子降到1.0
這時候就可以實現邏輯:通過數組獲取版本差值,然后先從版本1.5降到1.4然后1.3然后1.2然后1.1最后才能到1.0
而不是直接就從1.5一下子將到1.0
一般更新升級的話都會調用 libbz2 使用patch的形式進行增量差分升級的,這里就不啰嗦了。