将 int 数组转换为 char 数组时获取笑脸而不是 0 和 1

Getting smiley faces instead of 0 and 1s when converting int array to char array

所以我有一个整数数组。我使用 for 循环将 int 数组的内容传输到 char 数组中。问题是当我输出值时,小数 %d 输出 0 和 1,但 %c 输出笑脸情绪。

int main()
{
    int array[10] = {0,1,0,1,1,0,1,1,1,0,0};
    char array2[10];
    int i;
    for(i=0;i<10;i++)
    {
        array2[i] = array[i];
        printf("%c %d\n", array2[i],array2[i]);
    }

}

笑脸是 "ASCII" 字符 1 和 2 在 Microsoft codepage 437 中的符号;字符 0 是不可见的;因此您的代码按预期执行,但可能与您预期的不同。

要用 ASCII '0''1' 字符填充 char 数组,您可以这样做

array2[i] = '0' + array[i];

试试这个:

array2[i] = array[i] + '0';

这会将 01 转换为 '0''1'

c 转换说明符打印一个字符。 ASCII 值(我假设您生活在 ASCII 世界中)01 在 ASCII 中是不可打印的。 '0''1' 字符的 ASCII 值为 0x300x31。打印不可打印的结果取决于实现。

你认为 ASCII 字符 0 或 1 应该是什么样子?我猜它在您的系统上打印为笑脸,因为它通常是不可打印的。

也许可以将字符打印为十六进制,这样您就可以看到位已设置。例如:

printf("%x", ch & 0xff);

(来自此处的解决方案:Printing hexadecimal characters in C

如果你想把字符打印成整数,你只需要转换它们。

printf("%d\n", (int)array2[i]);