c - 程序将 int 转换为 ASCII,我不知道为什么?
问题描述
所以我试图将一个数字从不同的基数转换为 10。我尝试调试,我 100% 确定问题出在此处: nr[i]=j
; 它的作用是接受整数 j 并将其转换为 ASCII,而不管 nr[i] 是一个 char 数组这一事实。我能做些什么来解决这个问题?
int baza,cifra,nrB10,i,j,x,corect;
char nr[32];
char conversie[36]={'0','1','2','3','4','5','6','7','8','9','10','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
printf("Base between 2 and %d):",BAZA_MAX);
scanf("%d",&baza);
printf("Nr. in base %d: ",baza);
scanf("%31s",nr);
nrB10=0;
corect=0;
x=strlen(nr)-1;
for (i=0;i<=x;i++) {
corect=0;
for (j=0;j<baza;j++) {
if (nr[i]==conversie[j]) {
corect=1;
nr[i]=j;
}
}
if (corect==0) {
printf("Numar gresit!");
break;
}
}
for (i=0;i<=3;i++) {
printf("%c",nr[i]);
}
return 0;
解决方案
当您将数字存储到变量时,它只是一个数字。这是一种比特模式,计算机并不真正知道(或关心)它代表什么。当您指定一个 int 或一个 char 或其他任何内容时,您是在告诉编译器如何期望它被使用。这样它就可以发现错误。在你的情况下,当你打印它时,这个数字“变成”你认为它可能是什么。printf 中的说明符决定了这一点。这里有两个例子:
printf("%c", 65); // It will print an A
printf("%d", 'A'); // It will print 65
同样,如果您可以查看计算机内部放置“A”和 65 的位置,它们看起来会完全一样。查看内存转储,您无法分辨哪个是哪个。
在这里,我将做同样的事情,并添加十六进制以增加娱乐性:
int n = 65;
printf("%c, %d, %x", n, n, n); // It prints, A, 65, 41
推荐阅读
- sql - SQL将一列中的两个单独项目组合在同一行中?
- batch-file - 如何对 Windows 10 批处理文件中的参数列表进行排序
- r - R中的双重嵌套函数
- docker - Buildbot Docker BUILDBOT_CONFIG_URL 如何使用 SSH 密钥进行设置?
- python - 在python中将字典传递给具有可修改元素的进程
- java - 使用 Spring Boot 在分页中跳过元素
- html - 使用整个导航栏更改字体和颜色时,Bootstrap 导航栏品牌和链接颜色不匹配
- azure - 如何轮换 Azure Key Vault 密钥
- c# - 获取隐藏窗口的 hWnd
- node.js - api 是通过 ip 访问,但不是 nodejs 中的域