非printf形式打印各种数据类型的十六进制和二进制
2012-06-21 16:32
357 查看
转载请标明是引用于 http://blog.csdn.net/chenyujing1234
欢迎大家提出意见,一起讨论!
以下是实现此功能的源码:
1、以Int为例求它的16进制数
结果:
float类型的二进制的存放方式请参考我的另一篇文章: 浮点型数据在内存中存储的表示[转载]
double 类型的二进制的存放方式请参考我的另一篇文章: 浮点型数据在内存中存储的表示[转载]
欢迎大家提出意见,一起讨论!
一、源码实现
为了适配各种数据类型,且可以通过sizeof得到此类型的大小,所以这里采用模板形式开发。以下是实现此功能的源码:
// 把十进制数(long型)分别以二进制和十六进制形式输出 template <typename T> void displayHexBin(const T& v) { const unsigned char c2h[] = "0123456789ABCDEF"; const unsigned char c2b[] = "01"; unsigned char* p = (unsigned char*)&v; char* buf = new char [sizeof(T)*2+1]; // 转为16进制 char* ptmp = buf; p = p + sizeof(T)-1; for (int i = 0; i < sizeof(T); i++, --p) { *buf++ = c2h[*p >> 4]; *buf++ = c2h[*p & 0x0F]; } *buf = '\0'; printf("hex format displayed as %s\n", ptmp); delete [] ptmp; // 转为2进制 p = (unsigned char*)&v; p = p + sizeof(T)-1; ptmp = buf = new char [sizeof(T)*8+1]; for (int i = 0; i < sizeof(T); i++, --p) { for (int j = 0; j < 8; j++) *buf++ = c2b[(*p >> (7-j)) & 0x1]; } *buf = '\0'; printf("bin format displayed as %s\n", ptmp); delete [] ptmp; }
二、框图解释
以上代码分为两部分,一个是转为16进制;一部分是转为2进制。1、以Int为例求它的16进制数
2、以Int为例求它的2 进制数
三、 数据测试
1、Int 转16 进制与2进制
// 测试四.1 Int 转16 进制与2进制 int dSourceOne = 2; int dSourceTwo = -2; displayHexBin(dSourceOne); displayHexBin(dSourceTwo);
结果:
2、float 转16进制与2 进制
// 测试四.2 double 转16 进制与2进制 float fSourceOne = 3.0; float fSourceTwo = -2.0; displayHexBin(fSourceOne); displayHexBin(fSourceTwo); printf("\n");
float类型的二进制的存放方式请参考我的另一篇文章: 浮点型数据在内存中存储的表示[转载]
3、double 转16 进制与2进制
// 测试四.3 double 转16 进制与2进制 double dSourceOne = 2.0; double dSourceTwo = -2.0; displayHexBin(dSourceOne); displayHexBin(dSourceTwo);
double 类型的二进制的存放方式请参考我的另一篇文章: 浮点型数据在内存中存储的表示[转载]
相关文章推荐
- 非printf形式打印各种数据类型的十六进制和二进制
- 非printf形式打印各种数据类型的十六进制和二进制
- 非printf形式的十六进制和二进制打印(雅虎面试题)
- 不是用它printf,将十进制数以二进制和十六进制的形式输出
- NSLog打印各种类型数据的方法
- 把十进制数(long型)分别以二进制和十六进制形式输出,不使用printf系列库函数
- 把十进制数(long型)分别为二进制和十六进制形式输出,不能使用printf
- 把十进制数(long型)分别以二进制和十六进制形式输出,不使用printf系列库函数
- 验证java中char数据类型在内存中的二进制形式为Unicode编码
- printf打印二进制数据
- C语言基础:printf打印基本数据类型汇总
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列。
- 不是用它printf,将十进制数以二进制和十六进制的形式输出
- python中各种基础类型的转换,二进制,八进制,十进制,十六进制
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- java 二进制 十进制 十六进制数据类型转换
- python中各种基础类型的转换,二进制,八进制,十进制,十六进制