首页 > 解决方案 > 程序将 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;

标签: cbase-conversion

解决方案


当您数字存储到变量时,它只是一个数字。这是一种比特模式,计算机并不真正知道(或关心)它代表什么。当您指定一个 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

推荐阅读