十六进制到字符串,没有多个前导零

时间:2019-03-14 07:38:15

标签: hex stringstream

我试图接受unsigned long类型的数字并将其提供给stringstream以生成以ASCII十六进制表示的字符串。

我的问题是我的充电控制器的协议要求所有0x10以下的数字都用前导零(无0x)表示,而我找不到在stringstream上使用的正确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"

我临时创建了一个函数,该函数将自动正确格式化所有内容,但仍然对stringstream是否可以做到这一点感到好奇

这是我的功能,几乎没有错误检查

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();
}

0 个答案:

没有答案