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

时间:2013-11-18 12:42:47

标签: c arrays pointers binary

我试图弄清楚如何以二进制形式打印字符的ascii值。这是我到目前为止所做的,但它根本不起作用,我不知道为什么。你们有人可以帮助我吗?

#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;
}

3 个答案:

答案 0 :(得分:2)

%c格式字符串将始终将相应的printf参数解释为字符。在这种情况下,它可能不是你想要的。

printf("ASCII in BIN: %d\n", myChar);

只会告诉myChar将其视为数字,打印出printf的ascii代码点。

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

执行此操作
printf("ASCII in BIN: %s\n", toBinary(myChar));

各种%代码及其含义here都有很好的参考。


但是,值得注意的是,toBinary函数可能无法执行您想要的操作。这个循环条件:

for (int i = sizeof(binaryValue); i >= 0; ++i) 

将从sizeof(int)开始计算,直到它用完整数,然后仅因为INT_MAX + 1 == INT_MIN而停止。因为您使用i作为数组索引,所以这几乎肯定会使您的程序崩溃。

您还需要确保使用'\0'终止正在生成的字符串,因为后续调用printf会识别字符串已结束。

并且,正如其他答案所述,您的toBinary实现也返回一个指向内存地址的指针,只要toBinary返回就会自动删除。

答案 1 :(得分:0)

printf("ASCII in BIN: %c\n", toBinary(myChar));

%c是打印一个角色。

并且,C中没有BOOL类型,因此您可以将其更改为字符串,并将指针传递给数组printf("%s", pointer)

答案 2 :(得分:0)

您正在返回本地数组的地址。

这既是错误的返回类型(char ** vs char *),也是一件坏事。