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;
}