C/C++ 十进制转16进制
来源:互联网 发布:淘宝京东评价体系 编辑:程序博客网 时间:2024/06/14 04:35
把一个十进制的数转换成16进制其实不难,但是我在实现的时候也折腾了会。
首先贴一个LeetCode上面的一个题目和C++解法。
- Convert a Number to Hexadecimal
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.
Note:
All letters in hexadecimal (a-f) must be in lowercase.
The hexadecimal string must not contain extra leading 0s. If the number is zero, it is represented by a single zero character ‘0’; otherwise, the first character in the hexadecimal string will not be the zero character.
The given number is guaranteed to fit within the range of a 32-bit signed integer.
You must not use any method provided by the library which converts/formats the number to hex directly.
const string HEX = "0123456789abcdef";class Solution {public: string toHex(int num) { if (num == 0) return "0"; string result; int count = 0; while (num && count++ < 8) { result = HEX[(num & 0xf)] + result; num >>= 4; } return result; }};
上面的方法的意思就是一个int是一个32位的有符号的数,通过8次转换成16进制,因为一位16进制的数最大F,也就是2^4。
每一次操作的时候跟0x0F做与操作的意思就是取最低的4位,然后在0~F中间匹配即可得到这一位的十六进制。
接下来再看一个写法,意思和上面一样。
const char * hex = "0123456789ABCDEF";char output[] = "0x00000000";int value = 0x89ABCDEF;for(int i = 0; i < 8; i++){ output[9 - i] = hex[(value >> i * 4) & 0x0F];}
如果一个int没有那么大,你也知道得到的hex的数据长度,那么上面的代码就可以简化了。比如我知道每一次我需要转化的int得到的hex长度只有两位,那就可以简化上面的代码。
void DectoHex(int dec, unsigned char *output, int length) { const char * hex = "0123456789ABCDEF"; for (int i = 0; i<length; i++) { output[length - i -1] = hex[(dec >> i * 4) & 0x0F]; } }
上面的length表示得到的hex的长度。
- C/C++ 十进制转16进制
- c++/c 十进制转2进制
- 十六进制转十进制 - C
- 十进制转十六进制 - C
- 十进制转二进制(C++)
- C十进制转二进制
- _objective-c 十进制转换成16进制
- C语言:八进制转十进制
- 十进制转二进制 c/c++
- c语言---十进制转二进制
- C语言十进制转二进制
- 十进制转二进制c代码
- C语言十进制转二进制
- C实例----十进制转二进制
- c 十进制数转十六进制
- 【iOS知识学习】_objective-c 十进制转换成16进制
- 十进制转换2-16进制(c语言算法实现)
- 【iOS知识学习】_objective-c 十进制转换成16进制
- C基础
- Android studio引入Cordova笔记
- 使用Caffe时碰到的问题及解决方法
- 采用scripy.misc.imreshape()来修改尺寸
- Linux终端和Line discipline图解
- C/C++ 十进制转16进制
- DEV GridControl控件设置单元格换行
- Linux电源管理(7)_Wakeup events framework
- 尚学堂大数据云计算Hadoop-Storm-Spark高级工程师课程课堂随堂视频
- VS2008 打开资源视图rc文件,提示在另一个编辑器中打开
- 文件上传与下载的详细解释以及upload组件的使用
- C基础和数据类型
- 学习笔记QueryRunner
- 纸牌博弈问题