Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92725
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-24 22:04
文章分类

全部博文(31)

文章存档

2014年(31)

我的朋友

分类: C/C++

2014-07-24 11:23:09



main
|-----log_init,getExeAbsoluteFilename
|-----tracker_load_from_conf_file
|-----tracker_load_status_from_file
|-----base64_init_ex
|-----tracker_mem_init
|-----.....

在main函数中调用base64_init_ex的代码:

点击(此处)折叠或打开

  1. base64_init_ex(&g_base64_context, 0, '-', '_', '.')
这个函数中初始化了全局变量g_base64_context,该变量的结构如下:

点击(此处)折叠或打开

  1. struct base64_context
  2. {
  3.     char line_separator[16]; //行分隔符
  4.     int line_sep_len; //行分隔符长度

  5.     /**
  6.      * max chars per line, excluding line_separator. A multiple of 4.
  7.      */
  8.     int line_length; //每行最大的字节数,不包括行分隔符

  9.     /**
  10.      * letter of the alphabet used to encode binary values 0..63
  11.      */
  12.     unsigned char valueToChar[64]; //存储A-Z,a-z,0-9的ascii值,如valueToChar[0]的值为‘A’,就是65

  13.     /**
  14.      * binary value encoded by a given letter of the alphabet 0..63
  15.      */
  16.     int charToValue[256]; //存储ascii值对应的序号,如: charToValue[65]就是charToValue[A]的值为0
  17.     int pad_ch;
  18. }


点击(此处)折叠或打开

  1. //初始化context变量
  2. void base64_init_ex(struct base64_context *context, const int nLineLength, \
  3.         const unsigned char chPlus, const unsigned char chSplash, \   //chplus='-',chsplash='_'
  4.         const unsigned char chPad)   //chpad='.'
  5. {
  6.       int i;

  7.       memset(context, 0, sizeof(struct base64_context));  //变量context置0

  8.       context->line_length = nLineLength;
  9.       context->line_separator[0] = '\n';
  10.       context->line_separator[1] = '\0';
  11.       context->line_sep_len = 1;

  12.       // build translate valueToChar table only once.
  13.       // 0..25 -> 'A'..'Z'
  14.       for (i=0; i<=25; i++)//构建valuetochar表,将数字换成对应的char
  15.       {
  16.          context->valueToChar[i] = (char)('A'+i);  //这里valueToChar[0]='A'
  17.       }
  18.       // 26..51 -> 'a'..'z'
  19.       for (i=0; i<=25; i++ )
  20.       {
  21.          context->valueToChar[i+26] = (char)('a'+i);//这里valueToChar[26]='a'
  22.       }
  23.       // 52..61 -> '0'..'9'
  24.       for (i=0; i<=9; i++ )
  25.       {
  26.          context->valueToChar[i+52] = (char)('0'+i);//这里valueToChar[52]='0'
  27.       }
  28.       context->valueToChar[62] = chPlus;   //valueToChar[62]=‘-’
  29.       context->valueToChar[63] = chSplash;  //valueToChar[63]=‘_’

  30.       memset(context->charToValue, BASE64_IGNORE, sizeof(context->charToValue));//charToValue置为-1
  31.       for (i=0; i<64; i++ )
  32.       {
  33.          context->charToValue[context->valueToChar[i]] = i;//这里把charToValue['A']=0;记录字符对应的序号,也就是charToValue[65]=0
  34.       }

  35.       context->pad_ch = chPad;
  36.       context->charToValue[chPad] = BASE64_PAD;  //这里charToValue['.']=-1,也就是charToValue[46]=-1
  37. }


阅读(540) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~