ANSI C中的类型问题

时间:2010-04-15 10:33:16

标签: c

我对输入ANSI C的问题很少: 1. char开头的“\ x”与char开头的0x之间有什么区别(或者在任何其他情况下为此)。 AFAIK,它们都意味着这是十六进制的......所以有什么不同。

  1. 将char转换为(unsigned),而不是(unsigned char) - 这是什么意思?为什么(无符号)'\ xFF'!= 0xFF?
  2. 谢谢!

1 个答案:

答案 0 :(得分:5)

  

“\ x”之间的区别是什么?   一个char的开头为0x   char的开头

区别在于0x12用于指定十六进制的整数,而“\ x”用于字符串文字。一个例子:

#include <stdio.h>

int main(){
  int ten = 0xA;
  char* tenString = "1\x30";
  printf("ten as integer: %d\n", ten);
  printf("ten as string: %s\n", tenString);
  return 0;
}

printf应该输出“10”(试着理解为什么)。

  

将char转换为(unsigned)时,不是   (unsigned char) - 这是什么意思?   为什么(无符号)'\ xFF'!= 0xFF?

“unsigned”只是“unsigned int”的缩写。所以你要从char转换为int。这将为您提供平台使用的字符集中字符的数字表示。请注意,您为字符获取的值取决于平台(通常取决于默认字符编码)。对于ASCII字符,您(通常)将获得ASCII代码,但除此之外的任何内容都将取决于平台和运行时配置。

了解从一种类型到另一种类型的转换是非常复杂的(通常,但并非总是如此,取决于平台),所以如果可以,请避免使用它。但有时候这是必要的。参见例如need-some-clarification-regarding-casting-in-c