将字符转换为无符号int-C

将字符转换为无符号int-C,c,ascii,C,Ascii,我不明白这条小干线的输出: int main(int argc, char **argv) { char c = '\336'; unsigned int u = (unsigned int) c; printf("%d\n",u); /* I'm waiting for 222 but no ...*/ exit(EXIT_SUCCESS); } 为什么这个打印像我的变量是有符号的int?我怎样才能得到我想要的值 多谢各位 标准没有指定默认情况下字

我不明白这条小干线的输出:

 int main(int argc, char **argv) {
     char c = '\336';
     unsigned int u = (unsigned int) c;
     printf("%d\n",u); /* I'm waiting for 222  but no ...*/
     exit(EXIT_SUCCESS);
}
为什么这个打印像我的变量是有符号的int?我怎样才能得到我想要的值


多谢各位

标准没有指定默认情况下字符是有符号的还是无符号的。因此,这是一个依赖于实现的,在您的机器上,它看起来是有签名的,“\336”在本例中是值-34

为了实现您的期望,您必须:

  • 将c定义为未签名的字符
  • 在printf中使用%u说明符

  • 有关进一步的解释,您可以在此处查看:

    首先,您应该说明实际输出是什么。其次,
    char
    可以是无符号的,如果它有8位(通常是8位),那么222就不适合它了。那么我该怎么做才能得到值222呢?我尝试了一些东西,但没有working@Shahbaz:222适合于无符号8位
    字符
    ,但不适合于有符号8位
    字符
    。此外,如果您提供的是
    无符号int
    @dreamlax,打字错误!:),则应使用
    %u
    而不是
    %d