当我尝试创建将十进制转换为十六进制字符串的代码时遇到问题。我遇到的此问题是“字符串下标超出范围”错误。我似乎无法找出字符串与范围冲突的地方,因此,我来这里是为了寻求您的帮助,以找出导致错误的原因!
这是代码
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;
如何解决?
答案 0 :(得分:4)
您正在访问hex
内部的字符,因为hex
为空:
hex[i] = temp + 48;
阅读std::string::operator[]
的文档:
reference operator[]( size_type pos );
返回对指定位置
pos
处字符的引用。不执行边界检查。如果为pos > size()
,则行为未定义。
您需要使用push_back
或operator+=
在std::string
的末尾附加字符:
hex += temp + 48;
在C ++中,将整数转换为十六进制表示的更好方法是使用std::stringstream
和std::hex
:
#include <string>
#include <sstream>
#include <iomanip>
std::string to_hex(int i)
{
std::stringstream ss;
ss << std::hex << i;
return ss.str();
}