C++ 十进制 转换为 二进制 在转换成 十六进制

本文介绍了一种将十进制数转换为十六进制数的方法,通过先转换为二进制再分组转换为十六进制的过程,并提供了一个具体的实例——将十进制数81转换为十六进制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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位二进制位单位进行换算.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值