void CSCommTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
char Hex16Char[3]; //存储转换的结果
memset(Hex16Char,'\0',3); //其实就是用了两位,但是数组是这样你不指定后面\0结束标识的话
int changeNum=81; //他会显示乱码例如81转换完16进制是51+乱码。
TenHex16(changeNum,Hex16Char); //所以 用到数组的时候一定要注意,给最后1位加入\0结束标识
CString asd;
asd.Format("%s",Hex16Char);
AfxMessageBox(asd);
}
char CSCommTestDlg::Hex16(char WillChangeNum[]) //该函数把四位二进制转换成十六进制数
{
int i;
i=(WillChangeNum[0])+(WillChangeNum[1]*10)+(WillChangeNum[2]*100)+(WillChangeNum[3]*1000);
switch(i)
{
case 0:
return '0';
case 1:
return '1';
case 10:
return '2';
case 11:
return '3';
case 100:
return '4';
case 101:
return '5';
case 110:
return '6';
case 111:
return '7';
case 1000:
return '8';
case 1001:
return '9';
case 1010:
return 'A';
case 1011:
return 'B';
case 1100:
return 'C';
case 1101:
return 'D';
case 1110:
return 'E';
case 1111:
return 'F';
}
return -1;
}
void CSCommTestDlg::TenHex16(int idnum,char *outchar) //参数是需要转换成16进制数的十进制数
{
char TwoHex[100]; //数组存放二进制数
char Willchange[4]; //每次以4位二进制数为一组 进行十六进制转换
memset(TwoHex,0,100);
memset(Willchange,0,4);
int i=0; //位数
bool HeightBit=0;
for (;;) //转换成二进制
{
if (idnum==1)
{
TwoHex[i]=1;
i++;
break;
}
else
{
TwoHex[i]=idnum%2;
idnum=idnum/2;
}
i++;
}
if (i%2==1) //如果是奇数位则补0 //保证是四位的倍数 后面好处理
{
i++;
TwoHex[i]=0;
}
int p=0;
for (int num=0;num<i;num++)
{
Willchange[p]=TwoHex[num];
p++;
if (p==4) //读取4位一组进行转换
{
p=0;
if (HeightBit==0) //heightBit 判断高位还是地位 =0表示是第一组是低位 放在数组【1】里面
{
outchar[1]=Hex16(Willchange); //二进制 4位为1组 函数返回十六进制
HeightBit=1;
}
else
outchar[0]=Hex16(Willchange);
}
}
}
原理:
十进制转化为二进制,用除余法,比如:
数81,用2不断除,整除写0,余1写1。
分别为,81除2余1,40除2余0,20除2余0,10除2余5,5除2余1,2除2余0,1余1
所以答案为:1010001 (倒着写)
十六进制转换为二进制或者十进制:
在转换过程中读取半字节而不是字节,十六进制的寻址方案只使用0~9得数字,大于10 的数由字母(A、B、C、D、E、F)来表示10、11、12、13、14、15。
二进制 |
十进制 | |
0 |
0000 |
0 |
1 |
0001 |
1 |
2 |
0010 |
2 |
3 |
0011 |
3 |
4 |
0100 |
4 |
5 |
0101 |
5 |
6 |
0110 |
6 |
7 |
0111 |
7 |
8 |
1000 |
8 |
9 |
1001 |
9 |
A |
1010 |
10 |
B |
1011 |
11 |
C |
1100 |
12 |
D |
1101 |
13 |
E |
1110 |
14 |
F |
1111 |
15 |
而八进制则是以每3位二进制位单位进行换算.