C++位操作 进制转换浅谈
来源:互联网 发布:左左网源码 编辑:程序博客网 时间:2024/06/03 23:49
这里不可能把每个细节都讲那么细,谨以此一例概之,读者只需要拓展即可。
/***************************************************************************************************************************************************************************************/
好,就从此开始吧。
对于一个32位的unsigned int来说。它所能表示的最大值是二进制的11111111111111111111111111111111(2),十六进制的FFFFFFFF(16)
对于二进制到十六进制的转换你可以发现二进制有32位,16进制有8位。从本质上来讲。二进制的每四位对应16进制的每一位。同样若是八进制。每三位对应其一位。
十六进制0x0000efa8对应二进制为:0000 0000 0000 0000 1110 1111 1010 1000(2)。因为e->1110 f->1111 a->1010 8->1000
在C++中。数值默认是用十进制表示的。
所以0x0000efa8这个数,如果赋给一个unsigned int 类型,其输出一定是我们所见的十进制,只不过我们分析的时候,是以其它进制的形式分析。
假设我们要将这个十进制转成16进制。
那么依次每四位取。
0x0000efa8 & 0xf;(取前四位) ----------------------------————--> 0x00000008 -------->8
0x0000efa8>>4 & 0xf;(取前五至八位) 即 0x00000efa & 0xf ---> 0x0000000a -------->10
0x0000efa8>>8 & 0xf;(取前九至12位) 即 0x000000ef & 0xf ---> 0x0000000f -------->15
0x0000efa8>>12 & 0xf;(取前13至16位)即 0x0000000e & 0xf ---> 0x0000000e ---->14
此时的数全部是0-15以内的数。可以根据一对一的关系算出对应的char
10-->'a'
11-->'b'
.....
15-->'f'
再将这些字符按照一定的规律整理可得相应16进制字符串。
上代码。。分析之
char * DecToHex(unsigned int srcInt){char * buffer=new char[9];//申请9个字符的空间,以'\0'结尾int i = 0;while (i<8)//将各位求出{buffer[3-i]=DecToChar(srcInt>>(4*i)&0xf);i++;}buffer[8]=0;return buffer;}char DecToChar(unsigned int srcInt){if (srcInt<0||srcInt>16){return NULL;}if (srcInt>=0&&srcInt<=9){return srcInt+'0';}else{return srcInt + 'A' -10;}}
- C++位操作 进制转换浅谈
- C语言位操作\进制转换(十四)
- 浅谈进制转换
- 进制转换与Java的位运算操作
- C位运算分析及进制转换
- 浅谈C语言位段
- 黑马程序员-c语言位操作以及进制
- 浅谈栈&&进制转换
- poj1331(浅谈进制转换)
- C的位操作
- C语言 位操作
- C 位操作
- c++(位操作符)
- C语言位操作
- C-位操作
- C语言位操作
- C/C++位操作
- C 位操作 详解
- Lazarus打开URL及文件(适用于WinCE)
- JMeter socket
- java中hashTable和hashMap的Key的详解
- 网图的邻接矩阵存储以及相关操作 C语言
- 从web.config文件中 截取字符串数组,输出结果
- C++位操作 进制转换浅谈
- Java经典代码(配置文件的积累。。。)
- Heighcharts ajax 动态更新链接状态图
- c语言试题
- Hadoop学习笔记1--Hadoop基础
- 开发者自立门户前请考虑五件事
- 利用动画移动imageview后,使之保持在最后的位置
- 架构师的职责及工作描述
- 使用Struts标签库,JSP页面报:java.lang.ClassNotFoundException: com.opensymphony.xwork2.util.TextUtils