c语言中Dectoother函数,C++ 数制转换

一、十进制 转换成 n 进制

这里要求 1< n <= 9

转换函数实现如下

//将十进制 dec 转换成 n 进制,结果存在 other中,other在外部分配内存

void Decimal_to_Other(int dec, char *other, int n)

{

//1 < n <= 9

int i=0;

int dec_copy = dec;

char* tmpArray = new char[64];

while(dec_copy != 0){

tmpArray[i] = dec_copy%n+'0';

dec_copy /= n;

i++;

} //n进制的串的高位 保存在 tmpArray的地位,

//如 6,二进制保存为tmpArray[0~2] = {0,1,1}

int len = i; //n进制串长

for(i=0;i

other[i] = tmpArray[len-i-1];

} //other[0~2]= {1,1,0} 这就是结果

other[len] = '/0';

delete[] tmpArray;

}

调用如下:

CString szNumber;

char* bin = new char[64]; //转化成二进制

Decimal_to_Other(m_Decimal,bin,2);

szNumber.Format("%s",bin);

AfxMessageBox(szNumber);

char* octal = new char[64]; //转化成八进制

Decimal_to_Other(m_Decimal,octal,8);

szNumber.Format("%s",octal);

AfxMessageBox(szNumber);

二、十进制 转换成 十六进制

转换函数如下

//hex 在外部分配空间

void Decimal_to_Hex(int dec, char *hex)

{

int i=0,flag;

int dec_copy = dec;

char* tmpArray = new char[64];

while(dec_copy != 0){

flag = dec_copy%16;

switch(flag){

case 10:

tmpArray[i] = 'A';

break;

case 11:

tmpArray[i] = 'B';

break;

case 12:

tmpArray[i] = 'C';

break;

case 13:

tmpArray[i] = 'D';

break;

case 14:

tmpArray[i] = 'E';

break;

case 15:

tmpArray[i] = 'F';

break;

default:

tmpArray[i] = flag+'0';

break;

}

dec_copy /= 16;

i++;

}

int len = i; //n进制串长

for(i=0;i

hex[i] = tmpArray[len-i-1];

}

hex[len] = '/0';

delete[] tmpArray;

}

调用如下:

CString szNumber;

char* hex = new char[64]; //转化成十六进制

Decimal_to_Hex(m_Decimal,hex);

szNumber.Format("%s",hex);

AfxMessageBox(szNumber);

三、二进制 转换成 十进制

int Binary_to_Decimal(CString szBin){

int len = szBin.GetLength(); //二进制串长

char* str = new char[len]; //存放串

double result = 0.0; //结果

strcpy(str,szBin.GetBuffer(0));

for(int i=0;i

if(str[i] == '1'){

result += pow(2,len-i-1); //计算 2 的 len-i 次方,并加入到最终结果中

continue;

}

else if(str[i] == '0'){

}

else{

AfxMessageBox("输入二进制串有误!");

return 0;

}

}

return (int)result;

}

调用如下:

CString szBinary = "101101101";

int decimal;

CString szDecimal;

decimal = Binary_to_Decimal(szBinary);

szDecimal.Format("十进制 结果为 %d",decimal);

AfxMessageBox(szDecimal);

四、八进制 转换成 十进制

int Octal_to_Decimal(CString szOct){

int len = szOct.GetLength(); //串长

char* str = new char[len]; //存放串

double result = 0.0; //结果

int nOct;

strcpy(str,szOct.GetBuffer(0));

for(int i=0;i

if(str[i] == '0'){

nOct = 0;

}

else if(str[i] == '1'){

nOct = 1;

}

else if(str[i] == '2'){

nOct = 2;

}

else if(str[i] == '3'){

nOct = 3;

}

else if(str[i] == '4'){

nOct = 4;

}

else if(str[i] == '5'){

nOct = 5;

}

else if(str[i] == '6'){

nOct = 6;

}

else if(str[i] == '7'){

nOct = 7;

}

else{

AfxMessageBox("输入八进制串有误!");

return 0;

}

result += (nOct*pow(8,len-i-1));

//CString msg;msg.Format("nOct = %d pow = %f result = %f",nOct,pow(8,len-i-1),result);

//AfxMessageBox(msg);

}

//delete[] str;

return (int)result;

}

调用如下:

CString szOctal = "1721";

int decimal;

CString szDecimal;

decimal = Octal_to_Decimal(szOctal);

szDecimal.Format("十进制 结果为 %d",decimal);

AfxMessageBox(szDecimal);

五、十六进制 转换成 十进制

int Hex_to_Decimal(CString szHex){

int len = szHex.GetLength(); //串长

char* str = new char[len]; //存放串

double result = 0.0; //结果

int nHex;

strcpy(str,szHex.GetBuffer(0));

for(int i=0;i

if(str[i] == '0'){

nHex = 0;

}

else if(str[i] == '1'){

nHex = 1;

}

else if(str[i] == '2'){

nHex = 2;

}

else if(str[i] == '3'){

nHex = 3;

}

else if(str[i] == '4'){

nHex = 4;

}

else if(str[i] == '5'){

nHex = 5;

}

else if(str[i] == '6'){

nHex = 6;

}

else if(str[i] == '7'){

nHex = 7;

}

else if(str[i] == '8'){

nHex = 8;

}

else if(str[i] == '9'){

nHex = 9;

}

else if(str[i] == 'A'){

nHex = 10;

}

else if(str[i] == 'B'){

nHex = 11;

}

else if(str[i] == 'C'){

nHex = 12;

}

else if(str[i] == 'D'){

nHex = 13;

}

else if(str[i] == 'E'){

nHex = 14;

}

else if(str[i] == 'F'){

nHex = 15;

}

else{

AfxMessageBox("输入十六进制串有误!");

return 0;

}

result += (nHex*pow(16,len-i-1));

}

return (int)result;

}

调用如下:

CString szHex = "1A2B";

int decimal;

CString szDecimal;

decimal = Hex_to_Decimal(szHex);

szDecimal.Format("十进制 结果为 %d",decimal);

AfxMessageBox(szDecimal);

六、利用栈实现

//《数据结构 c语言版》(严蔚敏) P48

void conversion(int N){

InistStack(S);

scanf("%d",dec); //从屏幕读取一个十进制

while(dec != 0){ //转换

Push(S,dec%N);

dec /= N;

}

while(!StackEmpty(S)){ //显示结果

Pop(S,e);

printf("%d",e);

}

}

PS:我实现了一个数值转化的小工具,大家可以下载使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值