实验程序是用vc6编译,一定注意文件扩展名为c,不是cpp,源码可以下载前面几个测试程序(链表、表、原子中有下载链接)中直接将下面源程序覆盖1.c的内容即可!
再次强烈建议在这些接口函数上设上断点,按F11跟进去把源码走一遍!才会获得大师们真正的深刻思想
看到(AP_T)这个接口,想起来openssl中的【大数库】(示例到下载:http://blog.csdn.net/dijkstar/article/details/4973506),
(AP_T)里面调用了XPT源程序如下:
#include <stdio.h> #include <string.h> #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 = %s\n", 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 = %s\n", 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); // //其他函数不再验证 }