2014-03-25 92 views
3

(编辑改变C/C++到C)char和unsigned char有什么区别?

请帮我找出一个干净的澄清charunsigned char在C.特别是当我们的嵌入式设备和普通PC机(缓冲区之间的差异之间传输数据unsigned char和普通char)。

+3

没有C/C++这样的东西。您可以使用C或C++,但不能同时使用这两种。选择你想问的一种语言。在C中,区别在于签名。 'char'可以用实现定义的方式进行签名或无符号签名,而'unsigned char'显然总是无符号的。 – user3447428

+0

在编码或解码操作中,我可以知道char和unsigned char类型的区别和作用。 ? –

+2

@ user3447428虽然它们确实是不同的语言,但它确实没有任何意义去问“C/C++”是如何工作的,这两种语言在涉及“char”时的行为都完全相同...... – Lundin

回答

8

你在问两种不同的语言,但在这方面,两者的答案(或多或少)是相同的。你真的应该决定你正在使用哪种语言。

差异:

  • 他们是不同类型的
  • 它的实现定义char是否带有符号

相似之处:

  • 它们都是整数类型
  • 他们是相同的大小(一个字节,至少8位)

如果你只是使用它们来传输原始字节值,没有算术,那么没有实际的区别。

+0

如果我考虑'C'语言我可以在编码或解码操作期间知道char和unsigned char类型的差异和影响。 ? –

+0

唯一真正的区别是'unsigned char'没有明确的签名,'char'可能被签名也可能不被签名。 (这是_implementation defined_ char'是否是有符号或无符号的,这意味着它可以完全处于编译器编写器的意愿之中,但编译器必须记录它是哪一个。)处理原始数据时,应该明确使用'unsigned char'。处理有意义的数据时,应根据数据的含义选择签名类型或未签名类型。如果数据的符号完全不相关,请使用普通的'char'。 –

3

char类型是特殊的。它不是一个无符号的字符或一个有符号的字符。这些是三种不同的类型(int和signed int是相同的类型)。一个char可能有一个有符号或无符号的表示。

从3.9.1基本类型

平原字符,符号的字符,和unsigned char三种不同类型。 A char,signed char和unsigned char占用相同数量的 存储并具有相同的对齐要求(3.11);也就是说,它们 具有相同的对象表示。

+0

Hi Dieter,在硬件级别(在设备驱动程序开发中)完成的编码或解码操作期间是否有对_char_和_unsigned char_的任何考虑? –

+0

谢谢,我澄清了。 –

相关问题