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
- 8位10进制数变成32进制数
- js手机号中间四位变成*号
- 32位16进制转换为10进制数
- 如何把手机号的中间四位变成'****'
- Problem H: 《为什么会变成这样呢》(位运算)
- 8位单片机 16位 32位区别?
- memcpy的8位,16位,32位分别实现
- 32位16位8位寄存器及编号
- 32位16位8位寄存器及编号
- 8位单片机 16位 32位区别?
- 8位单片机 16位 32位区别?
- 8位、32位处理器的动向
- 微型计算机一般分为4位、8位、16位、32位和64位机几种
- 8位处理器、16位处理器、32位处理器和64位处理器
- 计算机颜色格式( 8位 16位 24位 32位色)
- 实现把一个无符号数的二进制位模式从左到右反转后输出。例如:在32位机器下,把25,0~011001变成100110~0
- 32位 64位
- 输出n位k进制数
- windows 安装python3.6(numpy,scipy,pandas,matplotlib,scikit-learn)
- 什么是Quartz
- Activity&Fragment生命周期
- 菲波那切数列求余数
- AkkaCrawler 翻译(一)
- 8位10进制数变成32进制数
- C语言strtol()函数:将字符串转换成long(长整型数)
- 关于自定义控件和属性时TypedArray.getDimension应当注意的问题
- Ubuntu下使用git在github托管代码
- iOS 多个label/button自动换行
- RabbitMQ学习之PHP AMQP拓展安装
- 自实现简单线程池
- Vuex初探之旅
- JCF treeset的用法实例