如何在c中打印字符的十进制表示?

如何在c中打印字符的十进制表示?,c,arrays,pointers,binary,C,Arrays,Pointers,Binary,我试图找出如何以二进制打印字符的ascii值。这是我到目前为止所做的,但它根本不起作用,我也不知道为什么。你们这些C巫师中有人能帮我吗 #include <stdio.h> int main(int argc, char** argv) { char myChar; printf("Enter a character:\n"); scanf("%c", &myChar); printf("Your character is %c\n",

我试图找出如何以二进制打印字符的ascii值。这是我到目前为止所做的,但它根本不起作用,我也不知道为什么。你们这些C巫师中有人能帮我吗

#include <stdio.h>

int main(int argc, char** argv) 
{
    char myChar;

    printf("Enter a character:\n");
    scanf("%c", &myChar);
    printf("Your character is %c\n", myChar);
    printf("ASCII in BIN: %c\n", toBinary(myChar));

    return 0;
}

char* toBinary(int decimalNumber) 
{
    char binaryValue[7] = "";
    for (int i = sizeof(binaryValue); i >= 0; ++i) 
    {
        int remainder = decimalNumber % 2; 
        decimalNumber = decimalNumber / 2;

        binaryValue[i] = remainder;
    }
    return &binaryValue;
}
#包括
int main(int argc,字符**argv)
{
char-myChar;
printf(“输入字符:\n”);
scanf(“%c”和&myChar);
printf(“您的字符是%c\n”,myChar);
printf(“BIN中的ASCII:%c\n”,toBinary(myChar));
返回0;
}
字符*toBinary(整数小数)
{
字符二进制值[7]=“”;
对于(int i=sizeof(binaryValue);i>=0;++i)
{
整数余数=小数%2;
小数=小数/2;
二进制值[i]=余数;
}
返回值&二进制值;
}
%c
用于打印字符


而且,C中没有布尔类型,因此您可以将其更改为字符串,并将指向数组的指针传递给
printf(“%s”,pointer)
格式字符串将始终将相应的
printf
参数解释为字符。在这种情况下,它可能不是你想要的

printf("ASCII in BIN: %d\n", myChar);
只需告诉
printf
将其视为一个数字,即可打印出
myChar
的ascii码点

如果要打印由
toBinary
函数返回的字符串,可以使用

printf("ASCII in BIN: %s\n", toBinary(myChar));
各种
%
代码及其含义都有很好的参考


但是,还值得注意的是,您的
toBinary
函数可能无法实现您想要的功能。此循环条件:

for (int i = sizeof(binaryValue); i >= 0; ++i) 
将从
sizeof(int)
开始计数,直到用完整数,然后仅因为
int\u MAX+1==int\u MIN
而停止。因为您使用
i
作为数组索引,这几乎肯定会使程序崩溃

您还需要确保使用
'\0'
终止正在生成的字符串,因为后续调用
printf
将通过这种方式识别字符串已结束


并且,如其他答案所述,
toBinary
实现还返回一个指向内存地址的指针,该地址将在
toBinary
返回时自动删除。

返回本地数组的地址


这既是不正确的返回类型(char**vs char*),也是一件不好的事情。

您不能返回
binaryValue
的地址,因为它是
toBinary
的本地地址,并且当函数退出时数组不再存在。i>=0和++i一起在for循环中?。。。那么OP如何修复它呢?请阅读更多的C教程。我不确定这是不是一个好地方来解释这样的事情。谢谢!我理解printf和for循环的错误所在。但是,如何修复我的
toBinary
函数?它生成的字符串应该作为参数传入,而不是返回。这将解决立即删除的问题。此外,由于您需要二进制表示,并且sizeof以字节为单位,因此需要乘以8才能获得正确的位数。除此之外,还有我在回答中提到的东西,你的基本算法很好。
for (int i = sizeof(binaryValue); i >= 0; ++i)