實驗程序是用vc6編譯,一定注意文件擴展名為c,不是cpp,源碼可以下載前面幾個測試程序(鏈表、表、原子中有下載鏈接)中直接將下面源程序覆蓋1.c的內容即可!
再次強烈建議在這些接口函數上設上斷點,按F11跟進去把源碼走一遍!才會獲得大師們真正的深刻思想
看到(AP_T)這個接口,想起來openssl中的【大數庫】(示例到下載:http://blog.csdn.net/dijkstar/article/details/4973506),
(AP_T)里面調用了XPT源程序如下:
#include#include #include "include/Ap.h" #include "include/Fmt.h" #pragma comment(lib, "libcii.lib") //打印輸出 void Print(const char *tip, AP_T *pAT) { char str[200] = {0}; AP_tostr(str, 200, 10, *pAT); printf("%s = %sn", tip, str); } void main() { //注意:C語言一定要將這些變量聲明放在函數的頭部 AP_T a1, a2, a3, a4; AP_T b1, b2; char *end; char str1[200] = {0}; // // 將值初始化為100 // a1 = AP_new(100); Print("a1", &a1); // //從字符串轉換到AP // AP_fromstr函數內部自動分配一個AP // a2 = AP_fromstr("90898768665673572732648721684236487", 10, &end); // // 打印輸出 // AP_tostr不像 XP_tostr一樣修改a2 // 因此可以將輸出打印單獨做成一個函數供輸出 // AP_tostr(str1, 200, 10, a2); printf("a2 = %sn", str1); //取反 a1 = AP_neg(a2); Print("a1", &a1); //加法 // 該函數內部會分配一個AP // a1 = AP_fromstr("100000000000000000000000000000000000000000000000", 10, &end); Print("a1", &a1); a3 = AP_add(a1, a2); Print("加a3", &a3); //減法 // 該函數內部會分配一個AP // a3 = AP_sub(a1, a2); Print("減a3", &a3); //乘法 // 該函數內部會分配一個AP // a3 = AP_mul(a1, a2); Print("乘a3", &a3); //除法 // 該函數內部會分配一個AP // b1 = AP_div(a1, a2); Print("除a3", &b1); //mod // 該函數內部會分配一個AP // b2 = AP_mod(a1, a2); Print("余a3", &b2); // // 驗證 // a4的值應該和a1是一樣的 // a4 = AP_add(AP_mul(b1, a2), b2); Print("和a4", &a4); // // 轉換函數, // Fmt_register('!', AP_fmt); Fmt_print("轉換a4 = %!n", a4); // //其他函數不再驗證 }