马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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';
}
解析:
新手上路,请多指教,如有错误,请多多指出! |