实现十进制、二进制以及十六进制之间的进制转换

实现十进制、二进制以及十六进制之间的进制转换

因为是直接在MFC中实现有使用到Cstring 类型,如果是用在其他语言上改一下类型就可以。

//十进制转换

void C进制转换Dlg::OnBnClickedButtonDecconv()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

//先转换为二进制

m_strBinary = DecimalToBinary(m_strDecimal);

//再转换为十六进制

m_strHex = BinaryToHex(m_strBinary);

UpdateData(FALSE);

}

//二进制转换

void C进制转换Dlg::OnBnClickedButtonBinconv()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

//转换为十进制

m_strDecimal = BinaryToDecimal(m_strBinary);

//转换为十六进制

m_strHex = BinaryToHex(m_strBinary);

UpdateData(FALSE);

}

//十六进制转换

void C进制转换Dlg::OnBnClickedButtonHexconv()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

//先转换为二进制

m_strBinary = HexToBinary(m_strHex);

//再转换为十进制

m_strDecimal = BinaryToDecimal(m_strBinary);

UpdateData(FALSE);

}

/*上面的代码为测试按钮,下面为实现方法*/

//转换十六进制为二进制

CString C进制转换Dlg::HexToBinary(CString strHex)

{

int nLenth = strHex.GetLength();

char* Hex = new char[nLenth];

Hex = CStringToChar(strHex);

CString strBinary = _T("");

for (int i = 0; i < nLenth; i++)

{

//转换一位十六进制数为十进制

char h = Hex[nLenth - 1 - i];

int j = BtoH(h);

CString str;

str.Format(_T("%d"), j);

//转换十进制为4为二进制

str = DecimalToBinary(str);

strBinary += str;

}

return strBinary;

}

//转换二进制为十六进制

CString C进制转换Dlg::BinaryToHex(CString strBinary)

{

int nLength = strBinary.GetLength();

CString str = strBinary;

//位数不是四的倍数时补齐

switch (nLength % 4)

{

case 0:

break;

case 1:

strBinary.Format(_T("%d%d%d%s"), 0, 0, 0, str);

break;

case 2:

strBinary.Format(_T("%d%d%s"), 0, 0, str);

break;

case 3:

strBinary.Format(_T("%d%s"), 0, str);

break;

default:

return _T("");

break;

}

CString strHex, str1;

str1 = _T("");

nLength = strBinary.GetLength();

for (int i = 1; i <= (nLength / 4); i++)

{

//每四位二进制数转换为一十六进制数

str = strBinary.Left(4);

CString strDecimal = BinaryToDecimal(str);

int nDecimal = _ttoi(strDecimal.GetBuffer(0));

if (nDecimal < 10)

{

str1.Format(_T("%d"), nDecimal);

}

else

{

char c = 'A' + (nDecimal - 10);

str1.Format(_T("%c"), c);

}

strHex += str1;

strBinary = strBinary.Right(strBinary.GetLength() - str.GetLength());

}

return strHex;

}

//转换十进制为二进制

CString C进制转换Dlg::DecimalToBinary(CString strDecimal)

{

int nDecimal = _ttoi(strDecimal.GetBuffer(0));

int nYushu;	//余数

int nShang;	//商

CString strBinary = _T("");

char buff[2];

CString str = _T("");

CString str2 = _T("");

BOOL bContinue = TRUE;

while (bContinue)

{

nYushu = nDecimal % 2;

nShang = nDecimal / 2;

sprintf_s(buff, "%d", nYushu);

str = strBinary;

str2 = buff;

strBinary = str2 + str;

//strBinary.Format(_T("%s%s"), buff, str);

nDecimal = nShang;

if (nShang == 0)

{

bContinue = FALSE;

}

}

return strBinary;

}

//转换二进制为十进制

CString C进制转换Dlg::BinaryToDecimal(CString strBinary)

{

int nLenth = strBinary.GetLength();

char* Binary = new char[nLenth];

Binary = CStringToChar(strBinary);

int nDecimal = 0;

for (int i = 0; i < nLenth; i++)

{

char h = Binary[nLenth - 1 - i];

char str[1];

str[0] = h;

int j = atoi(str);

for (int k = 0; k < i; k++)

{

j = j * 2;

}

nDecimal += j;

}

CString strDecimal;

strDecimal.Format(_T("%d"), nDecimal);

return strDecimal;

}

//将16进制的一个字符转换为十进制的数

unsigned char C进制转换Dlg::BtoH(char ch)

{

//0-9

if (ch >= '0' && ch <= '9')

{

return (ch - '0');

}

//9-15

if (ch >= 'A' && ch <= 'F')

{

return (ch - 'A' + 0xA);

}

//9-15

if (ch >= 'a' && ch <= 'f')

{

return (ch - 'a' + 0xA);

}

return(255);

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值