uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型
这些数据类型是 C99 中定义的,具体定义在:/usr/include/stdint.h
-
- #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
格式化输出:
unit64_t
unit32_t
unit16_t
注意:
必须小心 uint8_t 类型变量的输出,例如如下代码,会输出什么呢?
uint8_t fieldID = 67;
cerr<< "field=" << fieldID <<endl;
结果发现是:field=C 而 不是我们所想的
这是由于 typedef
uint8_t 实际是一个 char,
因此,输出 uint8_t 类型的变量实际输出的是其对应的字符, 而不是真实数字.
若要输出 67,则可以这样:
cerr<< "field=" << (uint16_t)
结果是:field=67
同样: