C/C++常用进制转换

C/C++常用进制转换

MFC进制转换.h

#pragma once
/*进制十六到十*/
QWORD Hex_Conversion_Dec(CString aHex);
/*
功能:十进制到十六进制字符串
参数:十进制整数
返回:十六进制字符串
*/
CString IntToHex(UINT64 aint);
/*
功能:二进制到十六进制
参数:二进制文本
返回: 十六进制字符串
*/
CString BinToHex(CString straa);
/*
功能:十六进制到二进制
参数:十六进制文本
返回: 二进制字符串
*/
CString HexToBin(CString straa);
/*判断是否为中文*/
bool IsChinese(char* Cstr);//判断字符串中是否存在中文

MFC进制转换.cpp

#include "MFC进制转换.h"
//#include "atlstr.h"
#include "pch.h"
#include "WinDNS.h"
#include "afxstr.h"

/*功能:十六进制到二进制过程函数*/
CString HexToBin2(int ae)
{
	CString str;
	switch (ae)
	{
	case 0:
	{
		str = "0000";
		break;
	}
	case 1:
	{
		str = "0001";
		break;
	}
	case 2:
	{
		str = "0010";
		break;
	}
	case 3:
	{
		str = "0011";
		break;
	}
	case 4:
	{
		str = "0100";
		break;
	}
	case 5:
	{
		str = "0101";
		break;
	}
	case 6:
	{
		str = "0110";
		break;
	}
	case 7:
	{
		str = "0111";
		break;
	}
	case 8:
	{
		str = "1000";
		break;
	}
	case 9:
	{
		str = "1001";
		break;
	}
	case 0xA:
	{
		str = "1010";
		break;
	}
	case 0xB:
	{
		str = "1011";
		break;
	}
	case 0xC:
	{
		str = "1100";
		break;
	}
	case 0xD:
	{
		str = "1101";
		break;
	}
	case 0xE:
	{
		str = "1110";
		break;
	}
	case 0xF:
	{
		str = "1111";
		break;
	}
	default:
		break;
	}
	return str;
}
/*
功能:十六进制到二进制
参数:十六进制文本
返回: 二进制字符串
*/
CString HexToBin(CString straa)
{
	//C0180300600
	//11000000000110000000001100000000011000000000
	CString str, ret;
	int strl = straa.GetLength();
	for (QWORD i = 0; i < strl; i++)
	{
		str = straa.Mid(i, 1);
		if ((str[0] >= '0' && str[0] <= '9') || (str[0] >= 'a' && str[0] <= 'f') || (str[0] >= 'A' && str[0] <= 'F'))
		{
			if (str[0] >= '0' && str[0] <= '9')
			{
				ret += HexToBin2(StrToInt(str));
			}
			if (str[0] >= 'a' && str[0] <= 'f')
			{
				int e = str[0] - 'a' + 10;
				switch (e)
				{
				case 0xA:
				{
					ret += HexToBin2(0xA);
					break;
				}
				case 0xB:
				{
					ret += HexToBin2(0xB);
					break;
				}
				case 0xC:
				{
					ret += HexToBin2(0xC);
					break;
				}
				case 0xD:
				{
					ret += HexToBin2(0xD);
					break;
				}
				case 0xE:
				{
					ret += HexToBin2(0xE);
					break;
				}
				case 0xF:
				{
					ret += HexToBin2(0xF);
					break;
				}
				default:
					break;
				}

			}

			if (str[0] >= 'A' && str[0] <= 'F')
			{
				int e = str[0] - 'A' + 10;
				switch (e)
				{
				case 0xA:
				{
					ret += HexToBin2(0xA);
					break;
				}
				case 0xB:
				{
					ret += HexToBin2(0xB);
					break;
				}
				case 0xC:
				{
					ret += HexToBin2(0xC);
					break;
				}
				case 0xD:
				{
					ret += HexToBin2(0xD);
					break;
				}
				case 0xE:
				{
					ret += HexToBin2(0xE);
					break;
				}
				case 0xF:
				{
					ret += HexToBin2(0xF);
					break;
				}
				default:
					break;
				}

			}
		}
	}
	return ret;
}
/*
功能:二进制到十六进制
参数:二进制文本
返回: 十六进制字符串
*/
CString BinToHex(CString straa)
{
	CString str, str1;
	UINT64 strl = straa.GetLength();
	if (!strl)
	{
		return "你好像没有输入字符";
	}
	if (strl % 4 != 0)
	{
		return "不是4的整倍数!转换失败!";
	}

	int b = 0;
	for (size_t i = 0; i < strl; i++)//检测是否存在非二进制数
	{
		str1 = straa.Mid(i, 1);
		if (!(str1[0] >= '0' && str1[0] <= '1'))
		{
			return "输入的不是二进制数!转换失败!";
		}
	}
	for (QWORD i = 0; i < strl; i++)
	{
		str1 = "";
		str1 = straa.Mid(i * 4, 4);
		if (str1 == "0000") { str += "0"; b = 1; continue; }
		if (str1 == "0001") { str += "1"; b = 1; continue; }
		if (str1 == "0010") { str += "2"; b = 1; continue; }
		if (str1 == "0011") { str += "3"; b = 1; continue; }
		if (str1 == "0100") { str += "4"; b = 1; continue; }
		if (str1 == "0101") { str += "5"; b = 1; continue; }
		if (str1 == "0110") { str += "6"; b = 1; continue; }
		if (str1 == "0111") { str += "7"; b = 1; continue; }
		if (str1 == "1000") { str += "8"; b = 1; continue; }
		if (str1 == "1001") { str += "9"; b = 1; continue; }
		if (str1 == "1010") { str += "A"; b = 1; continue; }
		if (str1 == "1011") { str += "B"; b = 1; continue; }
		if (str1 == "1100") { str += "C"; b = 1; continue; }
		if (str1 == "1101") { str += "D"; b = 1; continue; }
		if (str1 == "1110") { str += "E"; b = 1; continue; }
		if (str1 == "1111") { str += "F"; b = 1; continue; }
	}
	if (b == 0)
	{
		return "输入的不是二进制数!转换失败!";
	}
	return str;
}
/*
功能:十进制到十六进制过程函数
*/
char hexUnit(unsigned char unit)
{
	if (0 <= unit && unit <= 9)
		return unit + '0';
	else if (10 <= unit && unit <= 15)
		return unit - 10 + 'A';

	return '0';
}

/*
功能:十进制到十六进制字符串
参数:十进制整数
返回:十六进制字符串
*/
CString IntToHex(UINT64 aint)
{
	CString hex = "0x";
	hex = hexUnit((aint & 0xF000000000000000) >> 56);
	hex = hexUnit((aint & 0xF00000000000000) >> 52);
	hex = hexUnit((aint & 0xF0000000000000) >> 48);
	hex = hexUnit((aint & 0xF000000000000) >> 44);
	hex = hexUnit((aint & 0xF00000000000) >> 40);
	hex = hexUnit((aint & 0xF000000000) >> 36);
	hex = hexUnit((aint & 0xF00000000) >> 32);
	hex = hexUnit((aint & 0xF0000000) >> 28);
	hex = hexUnit((aint & 0x0F000000) >> 24);
	hex = hexUnit((aint & 0x00F00000) >> 20);
	hex = hexUnit((aint & 0x000F0000) >> 16);
	hex = hexUnit((aint & 0x0000F000) >> 12);
	hex = hexUnit((aint & 0x00000F00) >> 8);
	hex = hexUnit((aint & 0x000000F0) >> 4);
	hex = hexUnit((aint & 0x0000000F));

	return hex;

}

/*进制十六到十*/
QWORD Hex_Conversion_Dec(CString aHex)
{
	QWORD Dec = 0;
	QWORD temp = 0;
	QWORD count = 0;
	QWORD DecCount = 0;
	//int strlen = aHex.length();

	QWORD StrLen = aHex.GetLength(); //计算字符串长度
	QWORD a = StrLen;
	if (StrLen == 0)
	{
		return 0;
	}
	while (a--)
	{
		if (aHex[count] < '0' || (aHex[count] > '9' && aHex[count] < 'A') || (aHex[count] > 'F' && aHex[count] < 'a') || aHex[count]>'f')
		{
			//cout << "输入的不是十六进制格式" << endl;
			return 0;
		}
		count++;
	}


	QWORD sum = 0;             //用long long防止结果过大
	for (QWORD i = 0; aHex[i] != '\0'; i++)         //最后一位是'\0',不用算进去
	{
		switch (aHex[i])
		{
		case 'A': temp = 10; break;
		case 'B': temp = 11; break;
		case 'C': temp = 12; break;
		case 'D': temp = 13; break;
		case 'E': temp = 14; break;
		case 'F': temp = 15; break;
		case 'a': temp = 10; break;
		case 'b': temp = 11; break;
		case 'c': temp = 12; break;
		case 'd': temp = 13; break;
		case 'e': temp = 14; break;
		case 'f': temp = 15; break;
		default: temp = aHex[i] - '0'; break;
		}
		sum = sum + temp * pow(16, StrLen - 1 - i);
	}
	return sum;
}

QWORD strleng(char* str)
{
	char* p = NULL;
	QWORD a = 0;
	p = str;
	if (p == nullptr)
	{
		return 0;
	}
	while (*p)
	{
		a++;
		p++;

	}
	return a;
}
/*判断是否为中文*/
bool IsChinese(char* Cstr)//判断字符串中是否存在中文
{
	int nLen = strleng(Cstr);
	//unsigned char ch1[3] ={0};
	if (nLen <= 1)
	{
		return FALSE;
	}
	for (int i = 0; i < nLen; ++i)
	{
		if (Cstr[i] >= 0)
		{
			return false;
		}
		else
		{
			continue;
		}
	}
	return true;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C+V代码搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值