C / C ++转换问题,unsigned char转char

时间:2011-02-25 04:11:37

标签: c type-conversion printf

我有一个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中,并在命令提示符下打印它会产生笑脸。原因是什么? :(

5 个答案:

答案 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这样的狭窄类型只会转换为charint,因此无需投放它,事实上除了你的标题之外问题与铸造没什么关系。

答案 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;

无符号ucchar c的算法。

return (uc < 0) ? (char)(256-(char)abs(uc)) : (char)uc;