C/C++ 十进制转16进制

把一个十进制的数转换成16进制其实不难,但是我在实现的时候也折腾了会。

首先贴一个LeetCode上面的一个题目和C++解法。

  1. 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的长度。

    原文作者:进制转换
    原文地址: https://blog.csdn.net/leo_luo1/article/details/78818613
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞