C/C++ unsigned char*类型

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ unsigned char*类型相关的知识,希望对你有一定的参考价值。

C++ unsigned char *是表示无符号字符指针的意思。

细节如下:

char 前面添加unsigned表示是无符号的字符,也就是不可以存储负数;

在数据类型后面加*表示指针的意思;

指针是C和C++的一种特色数据类型,可以方便的访问内存,也可以通过指针自己控制堆的分配与使用。

此外:

在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的。如果要定义无符号类型,必须显式地在变量类型前加unsigned。
char vs unsigned char
相同点:在内存中都是一个字节,8位(2^8=256),都能表示256个数字
不同点:char的最高位为符号位,因此char能表示的数据范围是-128~127,unsigned char没有符号位,因此能表示的数据范围是0~255
实际使用中,如普通的赋值,读写文件和网络字节流都没有区别,不管最高位是什么,最终的读取结果都一样,在屏幕上面的显示可能不一样。
但是要把一个char类型的变量赋值给int、long等数据类型或进行类似的强制类型转换时时,系统会进行类型扩展,这时区别就大了。对于char类型的变量,系统会认为最高位为符号位,然后对最高位进行扩展,即符号扩展。若最高位为1,则扩展到int时高位都以1填充。对于unsigned char类型的变量,系统会直接进行无符号扩展,即0扩展。扩展的高位都以0填充。所以在进行类似的操作时,如果char和unsigned char最高位都是0,则结果是一样的,若char最高位为1,则结果会大相径庭。

参考文章:c语言中 char* 和 unsigned char* 的区别浅析

缘由

yolo.cc里:

以上是关于C/C++ unsigned char*类型的主要内容,如果未能解决你的问题,请参考以下文章

C/C++ unsigned char*类型

如何获取一个unsigned char*类型的字符串长度

unsigned和signed char

为什么C或C ++标准没有明确地将char定义为signed或unsigned?

unsigned char 和 signed char

C/C++中unsigned char和char的区别