gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:51:12 27 4
gpt4 key购买 nike

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

这是代码

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;

如何解决?

最佳答案

您正在访问 hex 中不存在的字符,因为 hex 是空的:

hex[i] = temp + 48;

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

reference       operator[]( size_type pos );

Returns a reference to the character at specified location pos. No bounds checking is performed. If pos > size(), the behavior is undefined.

您需要使用 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();
}

关于C++ 十进制到十六进制(字符串下标超出范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51190520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com