我创建了一个简单的函数将十进制值转换为十六进制,它将转换较小的值并正确显示out pout,但是如果输入一些较大的值,则会出现以下错误
变六周围的Stach已损坏
我的功能是
double convertToHexadecimal(int a,char b)
{
int hexa[2]={0}, x,y,i=1;
cout << "Enter the Decimal Number to convert to Hexadecimal: "<<endl;
cin >> x;
y=x;
do
{
hexa[i] = y%16;
y = y/16;
i--;
} while(y>0);
for (i=0;i<2;i++)
{
y = hexa[i];
if (y==10)
cout << 'A';
else if (y==11)
cout << 'B';
else if (y==12)
cout << 'C';
else if (y==13)
cout << 'D';
else if (y==14)
cout << 'E';
else if (y==15)
cout << 'F';
else
cout << y;
}
return y;
}
最佳答案
您的错误在于这部分:
do
{
hexa[i] = y%16;
y = y/16;
i--;
} while(y>0);
由于您声明了2个元素的数组,因此将十六进制值的长度限制为2(最大数字将为FF(十六进制)或255(十进制))。因此,对于更大的数字,当
y>0
时将具有i<0
,从而导致未定义的行为。可能的解决方案:
增加阵列的长度,或者
使用字符串数据类型。
使用字符串将是一个不错的选择。
string hexa="";
int q;
while (y>0) {
q = y%16;
if (q == 10)
hexa = 'A'+hexa;
else if (q == 11)
hexa = 'B'+hexa;
else if (q == 12)
hexa = 'C'+hexa;
else if (q == 13)
hexa = 'D'+hexa;
else if (q == 14)
hexa = 'E'+hexa;
else if (q == 15)
hexa = 'F'+hexa;
else
hexa = (q+'0')+hexa;
y %= 16;
}
cout << hexa;
关于c++ - 变量周围的堆栈已损坏,Visual Studio 2010问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31057964/