将 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';
这会将 0
或 1
转换为 '0'
或 '1'
c
转换说明符打印一个字符。 ASCII 值(我假设您生活在 ASCII 世界中)0
和 1
在 ASCII 中是不可打印的。 '0'
和 '1'
字符的 ASCII 值为 0x30
和 0x31
。打印不可打印的结果取决于实现。
你认为 ASCII 字符 0 或 1 应该是什么样子?我猜它在您的系统上打印为笑脸,因为它通常是不可打印的。
也许可以将字符打印为十六进制,这样您就可以看到位已设置。例如:
printf("%x", ch & 0xff);
(来自此处的解决方案:Printing hexadecimal characters in C)
如果你想把字符打印成整数,你只需要转换它们。
printf("%d\n", (int)array2[i]);
所以我有一个整数数组。我使用 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';
这会将 0
或 1
转换为 '0'
或 '1'
c
转换说明符打印一个字符。 ASCII 值(我假设您生活在 ASCII 世界中)0
和 1
在 ASCII 中是不可打印的。 '0'
和 '1'
字符的 ASCII 值为 0x30
和 0x31
。打印不可打印的结果取决于实现。
你认为 ASCII 字符 0 或 1 应该是什么样子?我猜它在您的系统上打印为笑脸,因为它通常是不可打印的。
也许可以将字符打印为十六进制,这样您就可以看到位已设置。例如:
printf("%x", ch & 0xff);
(来自此处的解决方案:Printing hexadecimal characters in C)
如果你想把字符打印成整数,你只需要转换它们。
printf("%d\n", (int)array2[i]);