我的int到hex函数有什么问题?

时间:2011-05-23 20:28:44

标签: c++ integer hex

为什么这段代码没有给我正确的大数值?它是否与我使用大于32位的数字有关?如果是这样,我如何让我的函数接受任何位大小的值?我只是重载功能吗?这似乎有点浪费空间

std::string makehex(unsigned int value, unsigned int size = 2){
    std::string out;
    while (value > 0){
        out = h[value % 16] + out;
        value /= 16;
    }
    while (out.size() < size)
        out = "0" + out;
    return out;
}

编辑:用法:

std::string value = makehex(30, 5);
std::cout << value; // 0001e

2 个答案:

答案 0 :(得分:7)

template<typename T>
std::string makehex(T value, const unsigned size = 2 * sizeof(T))
{
    std::string out(size, '0');
    while (value && size){
        out[--size] = "0123456789abcdef"[value & 0x0f];
        value >>= 4;
    }
    return out;
}

演示:http://ideone.com/v04Vo

答案 1 :(得分:2)

也许这个功能是作为练习完成的,但为什么不使用%x printf格式键呢?它会将整数值显示为十六进制,然后您只需预先使用0n,其中n是您希望显示的字符数,0表示要填充0的

EX:

std::string makehex(unsigned int value ) {
    char chOut[10];
    sprintf( chOut, "%08x", value );
    return std::string(chOut);
}

如果用整数值14576调用它,它将返回字符串“000038f0”