我试图接受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();
}