📄 digit_conv.cpp
字号:
#include "digit_conv.h"
NAMESPACE_BEGIN(digit)
//将10进制数转换为任意进制(2~36)
string DToA(unsigned long dvalue, unsigned step){
if(step < 2 || step > 36) return NULL;
//bool bnegative = dvalue > 0 ? false : true;
char buff[128] = {0};
unsigned pos = 127, tmpValue = dvalue, tv;
while(true){
buff[--pos] = (tv = tmpValue % step) > 9 ? (tv - 10) + char('A') : tv + char('0');
if((tmpValue /= step) == 0)
break;
}
string result (&buff[pos]);
return result;
}
//将任意进制(2~36)的数转换为10进制
unsigned long AToD(string dvalue, unsigned step/*2~36*/){
if(step < 2 || step > 36) return NULL;
unsigned long result = 0;
unsigned maxPos = dvalue.length();
unsigned tv;
for(unsigned index = 0; index < maxPos; index++){
tv = dvalue[index];
if(isalpha(tv)){
if(islower(tv)) tv = toupper(tv);
tv -= char('A');
tv += 10;
}
else if(isdigit(tv))
tv -= char('0');
else return unsigned long(-1);//invilad string
result += tv * mexp(step, maxPos - index - 1);
}
return result;
}
string DToB(unsigned long dvalue){
return DToA(dvalue, 2);
}
unsigned long BToD(string bvalue){
return AToD(bvalue, 2);
}
string DToH(unsigned long dvalue){
return DToA(dvalue, 16);
/* char buff[64];
sprintf(buff, "%X", dvalue);
string result(buff);
return result;*/
}
unsigned long HToD(string hvalue){
return AToD(hvalue, 16);
}
string DToO(unsigned long dvalue){
return DToA(dvalue, 8);
/* char buff[64];
sprintf(buff, "%o", dvalue);
string result(buff);
return result;*/
}
unsigned long OToD(string hvalue){
return AToD(hvalue, 8);
}
unsigned long mexp(unsigned long dvalue, unsigned counts){
unsigned result = 1;
for(int i = 0; i < counts; i++) result *= dvalue;
return result;
}
NAMESPACE_END
/*******************************TEST********************************************
#include <iostream>
#include <cstdio>
#include "digit_conv.h"
using namespace std;
using namespace digit;
int main(int argc, char* argv[])
{
printf("Hello World!\n");
unsigned value;
string bstr, ostr, dstr, hstr, str33;
while(true){
cout<<"Pls input:";
cin>>value;
bstr = DToB(value);
ostr= DToO(value);
dstr = DToA(value, 10);
hstr = DToH(value);
str33= DToA(value, 33);
printf("BIN = %s; OCT = %s; DEC = %s; HEX = %s, 33= %s\n", bstr.c_str(), ostr.c_str(),
dstr.c_str(), hstr.c_str(), str33.c_str());
printf("From Bin = %d, from Oct = %d, from Dec = %d, from Hex = %d, from 33 = %d\n", BToD(bstr),
OToD(ostr), AToD(dstr, 10), HToD(hstr), AToD(str33, 33));
}
return 0;
}
**********************************END TEST *******************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -