十进制转化为十六进制输入整数大于等于2^32的问题,如何解决?

孙老师的小迷弟 2019-01-12 04:16:11
烦请各位大佬指导一下我这个漏洞怎么解决?
我是用char类型的数组存储转换后的十六进制数字,然而当输入的数据过大
如输入:2^32或2^31 输出的结果是这样子。



很想知道大家是如何处理这种问题的。
下面是我的代码

//将十进制整数转化为16进制
#include <stdio.h>
#define MAXSIZE 100+10
#define BASE 16
int main(){
int n,base,temp;
int i=0;
char array[MAXSIZE];
printf("请输入要转化的整数:\n");
scanf("%d",&n);

do{
temp=n%BASE;
if(temp<10) //算法的核心:让这个数一直除以2,保留余数,直到商为0,倒序输出余数
array[i]='0'+temp;
else
array[i]='A'+temp-10;
n=n/BASE;
i++;
}while(n!=0);

printf("\n");
printf("\n");
printf("转换后的16进制数为:\n");
for(int j=i-1;j>=0;j--){ //倒序打印
printf("%c",array[j]);
}
return 0;
}















...全文
199 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2019-01-13
  • 打赏
  • 举报
回复
用long,再不行用long long,再不行,字符串模拟大数计算。
lin5161678 2019-01-13
  • 打赏
  • 举报
回复
引用 1 楼 独孤由过 的回复:
任意进制之间的相互转换

#include<iostream>

char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

int hexConversion(char *str, char *istr, int x, int n)
{
int sum = 0, lengh = strlen(str);
for (int i = lengh - 1; i >= 0; --i)
for (int j = 0; j < 16; ++j)
if (str[i] == hex[j])
sum += j*pow(x, lengh - i - 1);
int count = 0;
do
{
istr[count] = hex[sum%n];
sum /= n;
++count;
} while (sum != 0);
return count;
}

int main()
{
char str[100], istr[100];
int x, n;
std::cout << "输入数和进制:";
std::cin >> str >> x;
std::cout << "输入转换的进制:";
std::cin >> n;
int count = hexConversion(str, istr, x, n);
std::cout << "结果为:";
for (int i = count - 1; i >= 0; --i)
std::cout << istr[i];
return 0;
}
你都没看题主遇到的问题是什么
怎么转换题主知道并且代码都写出来了
题主的问题是 溢出
如果数据 超过int的取值范围 代码结果错
想知道怎么处理
而你的代码 会出现和题主一样的问题
解决的是题主并不关心的任意进制转换到任意进制

另外2个问题
1. pow没写头文件
2. 任意进制转十进制的时候从后往前计算又掉low 从前往后计算方便多了

赵4老师 2019-01-13
  • 打赏
  • 举报
回复
char * __cdecl _ui64toa(unsigned __int64, char *, int);
独孤过 2019-01-12
  • 打赏
  • 举报
回复
任意进制之间的相互转换

#include<iostream>

char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

int hexConversion(char *str, char *istr, int x, int n)
{
	int sum = 0, lengh = strlen(str);
	for (int i = lengh - 1; i >= 0; --i)
	for (int j = 0; j < 16; ++j)
	if (str[i] == hex[j])
		sum += j*pow(x, lengh - i - 1);
	int count = 0;
	do
	{
		istr[count] = hex[sum%n];
		sum /= n;
		++count;
	} while (sum != 0);
	return count;
}

int main()
{
	char str[100], istr[100];
	int x, n;
	std::cout << "输入数和进制:";
	std::cin >> str >> x;
	std::cout << "输入转换的进制:";
	std::cin >> n;
	int count = hexConversion(str, istr, x, n);
	std::cout << "结果为:";
	for (int i = count - 1; i >= 0; --i)
		std::cout << istr[i];
	return 0;
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧