Что не так с моей функцией int to hex? - PullRequest
0 голосов
/ 24 мая 2011

почему этот код не дает мне правильные значения для больших чисел? это как-то связано со мной, используя числа больше 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 ]

7 голосов
/ 24 мая 2011
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

2 голосов
/ 24 мая 2011

Может быть, эта функция выполнена в качестве упражнения, но почему бы не использовать клавишу формата %x printf? он будет отображать целочисленное значение в шестнадцатеричном формате, тогда вы просто заранее используете 0n, где n - это количество символов, которое вы хотите отобразить, а 0 указывает, что оно дополняется нулями

EX:

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

Если вы вызовете это с целочисленным значением 14576, он вернет строку «000038f0»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...