|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 qq1242009750 于 2017-12-1 21:27 编辑
文章后面有分析
参数说明:
Stack *S :普通栈
Stack *Hexadecimal : 用于存放十六进制的栈
char * Str : 存放十六进制字符串
int *Binary : 存放数值二进制的数组
int len : 二进制数组元素个数
- //二进制转十六进制
- void BinaryChangeHexadecimal(Stack *S, Stack *Hexadecimal, char * Str, int *Binary, int len)
- {
- char ch;
- ElemType *t_base = S->top; //保存二进制的栈底
- for (int i = 0; i < len/*下标与长度差1*/; i++)
- {
- Push(S, Binary[i]);
- }
- int i = 0;
- int Sum = 0;
- while (t_base != S->top) //判断是否到了二进制的栈底
- {
- while (i < 4 && t_base != S->top)
- {
- //计算出十六进制数
- Sum += (int)(Pop(S) * pow(2,i));
- i++;
- }
- i = 0;
- Push(Hexadecimal, Sum);
- Sum = 0;
- }
- len = 0;
- while (Hexadecimal->base != Hexadecimal->top)
- {
- ch = Pop(Hexadecimal);
- //把数值转换为字符(十六进制)
- if (ch < 10)
- {
- Str[len] = ch + '0';
- }
- else
- {
- switch (ch)
- {
- case 10:
- Str[len] = 'A';
- break;
- case 11:
- Str[len] = 'B';
- break;
- case 12:
- Str[len] = 'C';
- break;
- case 13:
- Str[len] = 'D';
- break;
- case 14:
- Str[len] = 'E';
- break;
- case 15:
- Str[len] = 'F';
- break;
- }
- }
- ++len;
- }
- Str[len] = '\0';
- }
复制代码
解析:
新手上路,请多指教,如有错误,请多多指出! |
|