我试图弄清楚如何以二进制形式打印字符的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;
}
答案 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 *),也是一件坏事。