汉字转换成二进制、十进制和十六进制显示

汉字转换成二进制、十进制和十六进制显示

今天我的网友猎心锁跟我讨论汉字转十六进制的问题。二进制、十进制、十六进制这三个进制之间的转换就让我头疼,现在又加上了汉字,无疑是“雪上加霜”。我的大脑不堪重负,思绪混乱。下午到图书馆查阅资料,也没发现有价值的线索,以致最终都没有讨论出答案。

在我的网友“冷静啊冷静”的帮助下,终于在www.pudn.com上找到了相关的资料,下载下来试试,果然实现了我们想要的功能:将输入的汉字分别转换成了二进制、十进制和十六进制,程序运行效果如下图:

汉字转换成二进制、十进制和十六进制显示

现将程序的主要代码分享如下:

void CUnicodeDlg::OnTranslate()

{

    // TODO: Add your control notification handler code here

    UpdateData(true);

    CString PP;

    PP=m_chinesecharacters;

    if(m_chinesecharacters.IsEmpty())

    {

        AfxMessageBox("请输入汉字!");

            return;

    }

    int len=PP.GetLength();

    int unicode;                      //十进制转化为十六进制进用到的中间值

    const int MAX_FILE_LENGTH=500;

    WCHAR UnicodeFile[MAX_FILE_LENGTH];

    MultiByteToWideChar( CP_ACP, 0, PP,-1,UnicodeFile,MAX_FILE_LENGTH);

    PP="";

    CString midd,temp="";//中间值

    for(int loop=0;loop<len/2;loop++)

    {

        unicode=UnicodeFile[loop];

        m_binary=tentobinary(unicode);

        midd.Format("%d",unicode);

        temp.Format("%d",unicode);

        m_unicodedec=m_unicodedec+temp;

        m_unicodedec=m_unicodedec+" ";

        midd.Format("%d",(unicode)/(16*16*16));

        midd=tentosixteen(midd);

        PP=PP+midd;

        unicode=unicode-(unicode)/(16*16*16)*16*16*16;

        midd.Format("%d",(unicode)/(16*16));

        midd=tentosixteen(midd);

        PP=PP+midd;

        unicode=unicode-(unicode)/(16*16)*16*16;

        midd.Format("%d",(unicode)/16);

        midd=tentosixteen(midd);

        PP=PP+midd;

        unicode=unicode-unicode/16*16;

        midd.Format("%d",unicode);

        midd=tentosixteen(midd);

        PP=PP+midd;                    //这是最后结果

        m_unicodehex=PP;

        UpdateData(false);

    }

}

 

CString CUnicodeDlg::tentosixteen(CString ten)

{

    if(ten=="10")

        ten="A";

    if(ten=="11")

        ten="B";

    if(ten=="12")

        ten="C";

    if(ten=="13")

        ten="D";

    if(ten=="14")

        ten="E";

    if(ten=="15")

        ten="F";

    return ten;

}

CString CUnicodeDlg::tentobinary(int iNum)

{  

      int i;               /*循环变量*/  

      char a[17];       /*输出的进制数*/

      memset(a,0,17);

      a[16]='/0';  

      printf("please input the number(>0):");  

      scanf("%d",&iNum);  

     for (i=15;i>=0;i--)

      {  

          if(iNum==0   )

          {  

           for(;i>=0;i--)

           {  

                  a[i]='0';  

           }  

            break;  

           }  

          if(iNum%2 == 0 )

{/*如果进制数被整除*/  

                iNum=iNum/2;  

                a[i] ='0';             /*相应进制数位置*/  

           }

else

{  

                  iNum=(iNum-1)/2;  

                  a[i]= '1';             /*否则置  */  

           }  

          } 

      return (CString)a;

}

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值