8位10进制数变成32进制数

1、输入一个最大的数,确定需要的多少个32进制位

int GetDigitNum32(unsigned int max)
{
 int off;
 int num;
 off = 5;
 num = 0;
 while(max)
 {
	 max = max >> off;
	 num++;
 }
 return num;
}


2、无符号数转换成字符

char* NumToChar(unsigned int num, int base,char* buf, int max_digit)
{
   int i;
   int mod_res;
   unsigned int tmp;
   assert(base >= 2 && base <= 32);
   if(max_digit > 15)
	   max_digit = 15;
   buf[max_digit] = 0;
   for(i=max_digit - 1; i >= 0; i--)
   {
     mod_res = num % base;
	 num -= mod_res;
	 num /= base;
	 if(mod_res >= 0  && mod_res <= 9)
	 {
        mod_res += '0';
		buf[i] = mod_res;
	 }
	 else
	 {
		 buf[i] = mod_res - 10 + 'A';
	 }
   }
   return buf;
}


3、数转换成32进制的字符串

char* NumToChar32(unsigned int num,char* buf, int max_digit)
{
	int i;
	int mod_res;
    int off;
	if(max_digit > 15)
		max_digit = 15;
	buf[max_digit] = 0;
	off = 0;
	for(i=max_digit - 1; i >= 0; i--)
	{   
        mod_res = (num >> off) & 0x01F;
		if(mod_res >= 0  && mod_res <= 9)
		{
			mod_res += '0';
			buf[i] = mod_res;
		}
		else
		{
			buf[i] = mod_res - 10 + 'A';
		}
		off += 5;
		if(off >= 31)
			off = 31;
	}
	return buf;
}


4、32进制的字符串转换成数:

unsigned int Char32ToNum(char* str, int len)
{
  int i;
  int s;
  unsigned int num;

  for(i = 0; i < len; i++)
  {
	  if((str[i] >= '0' && str[i] <= '9'))
	  {
		  break;
	  }
	  else if((str[i] >= 'A' && str[i] <= 'V'))
	  {
		  break;
	  }
	  else
	  {
		  continue;
	  }
  }
  s = i;
  if(s == len - 1)
	  return MAX_NUM;
  num = 0;
  for(i = s; i < len; i++)
  {
	  if(str[i] >= '0' && str[i] <= '9')
	  {   
		  num <<= 5;
		  num += (str[i] - '0');
	  }
	  else if(str[i] >= 'A' && str[i] <= 'V')
	  {   
		  num <<= 5;
		  num += (str[i] - 'A' + 10);
	  }
	  else
	  {
		  break;
	  }
  }
  return num;
}


win32下的测试代码:

#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{   
	unsigned int i;
	char buf[32] = {0};
	char test[32] = {0};
    unsigned int num;
	char* str;
	int digit;
	unsigned int max = atoi("99999999");
	digit = GetDigitNum32(max);
	str = NumToChar(MAX_TEST, 2,&test[0], 31);
	num = Char32ToNum(str, strlen(str));
	printf("Hex = %X, 10 = %d, NumTochar = %s\n", MAX_TEST, MAX_TEST, str);

	printf("max = %s\n", str);
	for(i = 0;i <= 99999999; i++)
	{
       str = NumToChar32(i, &buf[0],digit);
       num = Char32ToNum(buf,strlen(str));
       if(num != i)
	   {
		   printf("i = %d,buf = %s, erro!!!\n", i, str);
	   }
	}
	return 0;

}


测试过的最大数,

#define  MAX_NUM 0xFFFFFFFF
#define  MAX_TEST 99999999

一个简单数字压缩程序,就成了。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值