C ++十进制到十六进制(字符串下标超出范围)

时间:2018-07-05 11:43:52

标签: c++ string

当我尝试创建将十进制转换为十六进制字符串的代码时遇到问题。我遇到的此问题是“字符串下标超出范围”错误。我似乎无法找出字符串与范围冲突的地方,因此,我来​​这里是为了寻求您的帮助,以找出导致错误的原因!

这是代码

int i;
int temp;
string hex;
long totalDecimal;
cin >> totalDecimal;

for (i = 0; totalDecimal != 0; i++)
{
    temp = totalDecimal % 16;

    if (temp < 10)
    {
        hex[i] = temp + 48;
    }
    else
    {
        hex[i] = temp + 55;
    }

    totalDecimal = totalDecimal / 16;
}

cout << hex;
return 0;

如何解决?

1 个答案:

答案 0 :(得分:4)

您正在访问hex内部的字符,因为hex为空:

hex[i] = temp + 48;

阅读std::string::operator[]的文档:

reference       operator[]( size_type pos );
     

返回对指定位置pos处字符的引用。不执行边界检查。如果为pos > size(),则行为未定义。

您需要使用push_backoperator+=std::string的末尾附加字符:

hex += temp + 48;

在C ++中,将整数转换为十六进制表示的更好方法是使用std::stringstreamstd::hex

#include <string>
#include <sstream>
#include <iomanip>
std::string to_hex(int i)
{
    std::stringstream ss;
    ss << std::hex << i;
    return ss.str();
}