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

来源:互联网 发布:ps淘宝详情页制作步骤 编辑:程序博客网 时间:2024/06/06 06:14

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
原创粉丝点击