非printf形式打印各种数据类型的十六进制和二进制
来源:互联网 发布:建党伟业有一天 知乎 编辑:程序博客网 时间:2024/06/05 22:02
一、源码实现
为了适配各种数据类型,且可以通过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,将十进制数以二进制数和十六进制的形式输出...
- 不是用它printf,将十进制数以二进制和十六进制的形式输出
- 不是用它printf,将十进制数以二进制和十六进制的形式输出
- 把十进制数(long型)分别为二进制和十六进制形式输出,不能使用printf
- 把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列。
- 把十进制数(long型)分别以二进制和十六进制形式输出,不使用printf系列库函数
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 把十进制数(long型)分别以二进制和十六进制形式输出,不使用printf系列库函数
- 把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数
- 雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
- 134 编程实现:把十进制数(long 型)分别以二进制和十六进制形式输出,不能使用 printf系列
- printf打印十六进制
- printf打印二进制数据
- printf函数打印二进制
- Android源码托管的地方
- ruby与mysql 5.X for win不兼容
- cocos2d-x学习之二:cocos2d-x之CCUserDefault使用
- HttpServletResponse的应用
- Cannot copy file. The Parameter Is Incorrect
- 非printf形式打印各种数据类型的十六进制和二进制
- 指针函数和函数指针的区别
- c++ stl library 学习(5)
- Servlet的中文输出问题
- android:installLocation简析
- android 设置文字样式
- web地址的写法分析
- 强化VB.NET编程多线程句柄技巧
- 通过开始关键字和结束关键字,查找所有的邮箱名称记录