为什么这段代码没有给我正确的大数字值?这与我使用大于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
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
也许这个函数是作为练习完成的,但为什么不使用%x
printf格式键呢?它将以十六进制显示整数值,然后您只需预先使用0n
,其中n
是您希望显示的字符数,而0
指示它用0的填充
例如:
std::string makehex(unsigned int value ) {
char chOut[10];
sprintf( chOut, "%08x", value );
return std::string(chOut);
}
如果用整数值14576
调用它,它将返回字符串"000038f0"