进制互相转换

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int  main() {
     int  i,v;
     char  bs[33];
     char  b[33];
     char  hs[9];
     char  h[9];
     char  s[4];
     char  *e;
 
// 十进制整数转二进制串;
     i=1024;
     ltoa(i,b,2);
     sprintf (bs, "%032s" ,b);
     printf ( "i=%d,bs=%s\n" ,i,bs);
// 十进制整数转十六进制串;
     i=1024;
     ltoa(i,h,16);
     sprintf (hs, "%08s" ,h);
     printf ( "i=%d,hs=%s\n" ,i,hs);
// 十六进制字符串转成十进制数
     strcpy (hs, "00000400" );
     sscanf (hs, "%x" ,&i);
     printf ( "hs=%s,i=%d\n" ,hs,i);
// 二进制字符串转化为十六进制字符串;
     strcpy (bs, "00000000000000000000010000000000" );
     i= strtol (bs,&e,2);
     ltoa(i,h,16);
     sprintf (hs, "%08s" ,h);
     printf ( "bs=%s,hs=%s\n" ,bs,hs);
// 二进制字符串转化为十进制数;
     strcpy (bs, "00000000000000000000010000000000" );
     i= strtol (bs,&e,2);
     printf ( "bs=%s,i=%d\n" ,bs,i);
// 十六进制字符串转成二进制串
     strcpy (hs, "00000400" );
     sscanf (hs, "%x" ,&i);
     ltoa(i,b,2);
     sprintf (bs, "%032s" ,b);
     printf ( "hs=%s,bs=%s\n" ,hs,bs);
// ASC\GBK字符串转十六进制串
     strcpy (s, "a汉" );
     i=0;
     while  (1) {
         if  (0==s[i])  break ;
         sprintf (hs+i*2, "%02X" ,(unsigned  char )s[i]);
         i++;
     }
     setlocale (LC_ALL, "chs" );
     printf ( "s=%s,hs=%s\n" ,s,hs);
// 十六进制字符串转成汉字(GBK)及字符(ASC)
     strcpy (hs, "61BABA" );
     i=0;
     while  (1) {
         if  (1!= sscanf (hs+i*2, "%2x" ,&v))  break ;
         s[i]=( char )v;
         i++;
     }
     s[i]=0;
     printf ( "hs=%s,s=%s\n" ,hs,s);
 
     return  0;
 
}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a汉,hs=61BABA
//hs=61BABA,s=a汉
*


void CMFCApplication2Dlg::OnBnClickedButtonDtohex()
{
    UpdateData(TRUE);
    int num = atoi(m_sInput);
    m_sInput.Format("0x%x",num);
    UpdateData(FALSE);
}
 
 
void CMFCApplication2Dlg::OnBnClickedButtonHextod()
{
    UpdateData(TRUE);
    m_sInput.MakeLower();
 
    char sz[50]={0};
    strcpy(sz,(LPCSTR)m_sInput);
    char* p = sz;
    int nlen = strlen(p);
    WORD dw = * (WORD*)p;
 
    char* p1="0x";
    WORD dw1 = *(WORD*)p1;
    if (dw==dw1)
    {
        p+=2;
        nlen-=2;
    }
 
    int data=0;
    int base=1;
    char *pend = p+nlen-1;
    while (pend>=p)
    {
        if (*pend>='a')
        {
            data+= ( (*pend-'a'+10) *base);
        }
        else
        {
            data+= ( (*pend-'0') *base);
        }
        base*=16;
        pend--;
    }
 
    m_sInput.Format("%d",data);
    UpdateData(FALSE);
}
 
 
void CMFCApplication2Dlg::OnBnClickedButtonDtob()
{
    UpdateData(TRUE);
    int num = atoi(m_sInput);
 
    char sz[100]={0};
    char sz2[100]={0};
    int i=0;
    while (num>0)
    {
        int n = num%2;
        //TRACE("%d",n);
        if (n==1)
        {
            sz[i]='1';
        }
        else
        {
            sz[i]='0';
        }
        i++;
        num/=2;
    }
    i--;
 
    for (int j=0;j<=i;j++)
    {
        sz2[j]=sz[i-j];
    }
 
    m_sInput = sz2;
    UpdateData(FALSE);
}
 
 
void CMFCApplication2Dlg::OnBnClickedButtonBtod()
{
    UpdateData(TRUE);
    m_sInput.MakeLower();
 
    char sz[100]={0};
    strcpy(sz,(LPCSTR)m_sInput);
    char* p = sz;
    int nlen = strlen(p);
    WORD dw = * (WORD*)p;
 
    int data=0;
    int base=1;
    char *pend = p+nlen-1;
    while (pend>=p)
    {
        data+= ( (*pend-'0') *base);
        base*=2;
        pend--;
    }
 
    m_sInput.Format("%d",data);
    UpdateData(FALSE);
}
 
 
void CMFCApplication2Dlg::OnBnClickedButtonRgbtoh()
{
    UpdateData(TRUE);
    m_sInput.MakeLower();
    char rgb[3]={0};
    char sz[50]={0};
    strcpy(sz,(LPCSTR)m_sInput);
    char* p = sz;
    int nlen = strlen(p);
 
    int i = 0;
    char *tokenPtr=strtok(sz,",");
    while(tokenPtr!=NULL)
    {
        //cout<<tokenPtr<<'\n';
        rgb[i] = atoi(tokenPtr);
        i++;
        tokenPtr=strtok(NULL,",");
    }
    if (i!=3)
    {
        AfxMessageBox("请输入如:12,255,241");
        return;
    }
 
    //int aa = RGB(1,2,3);
     
    m_sInput.Format("0x%06x",RGB(rgb[0],rgb[1],rgb[2]));
    UpdateData(FALSE);
}
 
 
void CMFCApplication2Dlg::OnBnClickedButtonHtorgb()
{
    // TODO: 在此添加控件通知处理程序代码
 
    UpdateData(TRUE);
    m_sInput.MakeLower();
 
    char sz[50]={0};
    strcpy(sz,(LPCSTR)m_sInput);
    char* p = sz;
    int nlen = strlen(p);
    WORD dw = * (WORD*)p;
 
    char* p1="0x";
    WORD dw1 = *(WORD*)p1;
    if (dw==dw1)
    {
        p+=2;
        nlen-=2;
    }
 
    int data=0;
    int base=1;
    char *pend = p+nlen-1;
    while (pend>=p)
    {
        if (*pend>='a')
        {
            data+= ( (*pend-'a'+10) *base);
        }
        else
        {
            data+= ( (*pend-'0') *base);
        }
        base*=16;
        pend--;
    }
 
    //m_sInput.Format("%d",data);
    byte*pRgb =(byte*)&data;
     
    m_sInput.Format("%d,%d,%d",pRgb[0],pRgb[1],pRgb[2]);
    UpdateData(FALSE);
}
 
 
void CMFCApplication2Dlg::OnBnClickedButtonAsciitod()
{
    UpdateData(TRUE);
    LPCSTR p=(LPCSTR)m_sInput;
    m_sInput.Format("%d",*p);
    UpdateData(FALSE);
}
 
 
void CMFCApplication2Dlg::OnBnClickedButtonDtoasciit()
{
    UpdateData(TRUE);
    int num = atoi(m_sInput);
    m_sInput.Format("%c",num);
    UpdateData(FALSE);
}
 
 
void CMFCApplication2Dlg::OnBnClickedButtonDwtoip()
{
    UpdateData(TRUE);
    DWORD dw = atol(m_sInput);
    byte ary_by[4]={0};
    memcpy(ary_by,&dw,sizeof(byte)*4);
 
    m_sInput.Format("%d.%d.%d.%d",ary_by[0],ary_by[1],ary_by[2],ary_by[3]);
 
    UpdateData(FALSE);
}
 
 
void CMFCApplication2Dlg::OnBnClickedButtonIptodw()
{
    UpdateData(TRUE);
    char sz[50]={0};
    strcpy(sz,(LPCSTR)m_sInput);
    char* p = sz;
    int i = 0;
    char *tokenPtr=strtok(p,".");
    byte ary_by[4]={0};
    while(tokenPtr!=NULL)
    {
        ary_by[i] = atoi(tokenPtr);
        i++;
        tokenPtr=strtok(NULL,".");
    }
 
    if (i!=4)
    {
        AfxMessageBox("请输入如:192.168.0.68");
        return;
    }
 
    DWORD dw;
    memcpy(&dw,ary_by,sizeof(ary_by)*4);
    m_sInput.Format("%d",dw);
    UpdateData(FALSE);
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值