⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 digit_conv.cpp

📁 PHS通信测试程序
💻 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 + -