我有一个unsigned char,我需要在printf之前转换为char。所以示例代码如下:
unsigned char y = sample.result;
char x = (char)y;
printf("%c \n", x);
但是,printf
不会打印x
但是如果我使用cout,x
会正确打印。我不知道为什么会这样。如何将unsigned char变量转换为char?我做错了吗? reinterpret_casting仅用于指针而我的指针不是指针。提前谢谢。
编辑:命令提示符返回一个笑脸“☺”,表示sample.result的值,对应于unsigned char 1.显然netbeans无法打印这个笑脸。我不知道它是如何被翻译成笑脸的。有什么帮助吗?
编辑2:我刚才意识到你不能打印字符x = 1;在netbeans中,并在命令提示符下打印它会产生笑脸。原因是什么? :(
答案 0 :(得分:0)
尝试将x
改为int
而不是char
,看看是否有效。 C规则要求将所有char参数转换为int,printf
是C函数。
答案 1 :(得分:0)
我对这个答案没有信心,但我刚写了一个简单的测试程序,它编译并打印字母A而不将unsigned char转换回char。
#include <stdio.h>
int main()
{
unsigned char c = 'A';
printf("%c\n",c);
return 0;
}
直接投射也有效:
#include <stdio.h>
int main()
{
unsigned char c = 'A';
printf("%c\n",(char)c);
return 0;
}
按照自己的方式行事......
#include <stdio.h>
int main()
{
unsigned char c = 'A';
char d = (char)c;
printf("%c\n",d);
return 0;
}
所以我现在假设我做错了什么。或者也许是你的问题?
答案 2 :(得分:0)
%c
的{{1}}转换仅适用于基本字符集中的字符。您似乎有一个想要打印的扩展字符,因此您必须使用适当的工具。其类型为printf
,打印格式为wchar_t
。但请注意,这取决于您的许多执行环境,%lc
设置和类似的东西。
BTW在很多情况下,像locale
这样的狭窄类型只会转换为char
或int
,因此无需投放它,事实上除了你的标题之外问题与铸造没什么关系。
答案 3 :(得分:0)
如果char x = 1
并且您希望打印出1,则需要在格式说明符中使用%d
而不是%c
。 %c
打印数字的ASCII representation,其中1为不可打印的字符,称为“标题的开头”。
答案 4 :(得分:0)
这里是转换方程式
char c
与无符号char uc
的算法。
return (c>127) ? (unsigned char)(-(256 + c)) : (unsigned char)c;
无符号uc
到char c
的算法。
return (uc < 0) ? (char)(256-(char)abs(uc)) : (char)uc;