【问题标题】:How can I print the decimal representation of a character in c?如何在c中打印字符的十进制表示?
【发布时间】:2013-12-01 14:55:13
【问题描述】:

我试图弄清楚如何以二进制形式打印字符的 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;
}

【问题讨论】:

  • 你不能返回binaryValue的地址,因为它是toBinary的本地地址,并且函数退出时数组不再存在。
  • i>=0 和 ++i 在 for 循环中一起使用?

标签: c arrays pointers binary


【解决方案1】:

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

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

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

如果您想打印出 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 返回时自动删除。

【讨论】:

  • 谢谢!我明白我在 printf 和 for 循环中做错了什么。但是,如何修复我的 toBinary 函数?
  • 它生成的字符串应该作为参数传入而不是返回。这将解决立即删除问题。此外,由于您需要二进制表示,并且 sizeof 以字节为单位,因此您需要乘以 8 才能获得正确的位数。除此之外,以及我在回答中提到的内容,您的基本算法都很好。
【解决方案2】:

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

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

【讨论】:

  • ...那么 OP 如何修复它?
  • 一定要阅读更多 C 教程。我不确定这是解释此类内容的好地方。
【解决方案3】:
printf("ASCII in BIN: %c\n", toBinary(myChar));

%c 是打印一个字符。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 2013-01-16
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    相关资源
    最近更新 更多