问题:uint8_t是什么数据类型?
解决:C++的主要数据类型,主要分为三类:布尔型,整型,浮点型。
按照posix标准,一般整型对应的*_t类型为: 1字节?? ? uint8_t 2字节?? ? uint16_t 4字节?? ? uint32_t 8字节?? ? uint64_t
类型的定义:
#ifndef __int8_t_defined ?
# define __int8_t_defined ?
typedef signed char ? ? ? ? ? ? int8_t; ??
typedef short int ? ? ? ? ? ? ? int16_t; ?
typedef int ? ? ? ? ? ? ? ? ? ? int32_t; ?
# if __WORDSIZE == 64 ?
typedef long int ? ? ? ? ? ? ? ?int64_t; ?
# else ?
__extension__ ?
typedef long long int ? ? ? ? ? int64_t; ?
# endif ?
#endif
typedef unsigned char ? ? ? ? ? uint8_t; ?
typedef unsigned short int ? ? ?uint16_t; ?
#ifndef __uint32_t_defined ?
typedef unsigned int ? ? ? ? ? ?uint32_t; ?
# define __uint32_t_defined ?
#endif ?
#if __WORDSIZE == 64 ?
typedef unsigned long int ? ? ? uint64_t; ?
#else ?
__extension__ ?typedef unsigned long long int ?uint64_t; ?
#endif ?
而在基础数据类型中,int也是4个字节的,所以可以把uint32_t看作是int的别名。
比如数据类型?long —般在 32 位程 序中为4字节 ,在 64 位程序中则为8字节也就是说不同编译器下long的大小可能不同。
为了避免由于依赖“典型”大小和不同编译器设置带来的奇怪 行为, ISO C99 引人了一类数据类型 ,?其数据大小是固定的?,不随编译器和机器设置而变化。
?
uint8_t就是可表示范围更小的整型数据类型。(char型从本质上说,也是种整型类型,它是长度为1的整数,通常用来存放字符的ASCII码)
拓展:由于uint8_t实际上就是一个char,所以输出 uint8_t类型的变量实际上输出对应的字符,而不是数值,所以如果想要按照数字输出,可以看看以下链接
c++ - uint8_t can't be printed with cout - Stack Overflow
比较简单的一个方法:
uint8_t a=102;
cout<<"a="<<+a;
即在需要输出的?uint8_t变量前面加“+”。
|