Шестнадцатеричная строка без нескольких ведущих нулей - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь принять число типа unsigned long и передать его в stringstream для генерации строки, представленной в шестнадцатеричном ASCII.

Моя проблема в том, что протокол для моего контроллера заряда требует, чтобы все числа ниже 0x10 былипредставлены с нулем в начале (без 0x), и я не могу найти правильный размер std :: setw () для использования в потоке строки, приведет к куче ведущих нулей или недостаточно в зависимости от моего ввода.

Пример:

//Example: std::setw(sizeof(unsigned long))
//Number given 0x01FE
//Number reiceved "000001fe"
//Number expected "01fe"
//Example 2: std::setw(2)
//Number given 0x0101FE
//Number reiceved "101fe"
//Number expected "0101fe"

Я временно создал функцию, которая автоматически все правильно отформатирует, но все же было любопытно, может ли это сделать поток строк

Это моя функция смаленькая ошибка проверки

std::string hexToString(unsigned long hex)
{

    std::stringstream ss;
    int longSize = sizeof(hex) * 8 - 8;

    for(int i = longSize; i >= 0; i = i - 8)
    {
        unsigned char hexValue = (hex >> i );
        if (hexValue == 0 && ss.str().empty() == true)
        {
            continue;
        }
        ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hexValue);
    }

    return ss.str();
}
...