char和unsigned char有什么区别?

3

(编辑更改C/C++为C)

请帮助我清楚地理解C语言中的charunsigned char。特别是当我们在嵌入式设备和普通PC之间传输数据时(unsigned char和普通char缓冲区之间的差异)。


4
C/C++这种说法是不存在的。你必须选择使用C或者C++其中之一,不能同时使用两者。如果要询问相关问题,请明确选定一种语言。在C语言中,主要区别在于字符的符号性。char类型可能以实现定义的方式被设为有符号或无符号,而unsigned char类型则始终为无符号。 - user3447428
我可以了解char和unsigned char类型在编码或解码操作期间的区别和影响吗? - Dig The Code
2
@user3447428 虽然它们是不同的编程语言,而且询问在“C/C++”中某些东西的工作方式确实没有意义,但是当涉及到 char 时,这两种语言的行为方式确实完全相同... - Lundin
2
@user3458841 什么是“编码或解码操作”?这个可以是任何意思。 - Lundin
@Lundin 这没关系。 - user3447428
2个回答

10
您在询问两种不同的语言,但在这方面,答案(或多或少)对于两者来说是相同的。但您确实应该决定使用哪种语言。
区别:
- 它们是不同的类型。 - `char` 是有符号的还是无符号的取决于具体实现。
相似之处:
- 它们都是整数类型。 - 它们的大小相同(至少8比特,一个字节)。
如果您仅使用它们来传输原始字节值,而没有进行算术运算,则没有实际区别。

如果我考虑'C'语言,我能知道char和unsigned char类型在编码或解码操作期间的区别和影响吗? - Dig The Code
1
唯一的真正区别是 unsigned char 不确定是否有符号,而 char 可能有或没有符号。(char 是否有符号或无符号是由实现定义的,这意味着它可以是任何一个,完全取决于编译器编写者的心情,但编译器必须记录它是哪个。) 在处理原始数据时,应明确使用 unsigned char。在处理有意义的数据时,根据数据的含义选择有符号类型或无符号类型。如果数据的符号性完全不相关,则使用普通的 char - This isn't my real name

3

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

来自3.9.1基本类型

普通char、signed char和unsigned char是三种不同的类型。一个char、一个signed char和一个unsigned char占用相同的存储空间,并具有相同的对齐要求(3.11);也就是说,它们具有相同的对象表示。


嗨,迪特,设备驱动程序开发中,在硬件级别进行编码或解码操作时,是否考虑了_char_和_unsigned char_? - Dig The Code
谢谢,我理解得很清楚。 - Dig The Code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接