uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型?

转自http://blog.csdn.net/zklth/article/details/7978362

uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型?这些数据类型是 C99 中定义的,具体定义在:/usr/include/stdint.h ISO C99: 7.18 Integer types <stdint.h>

/* There is some amount of overlap with <sys/types.h> as known by inet code */  
#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  
  
/* Unsigned.  */  
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 %llu
unit32_t %u
unit16_t %hu

注意:
必须小心 uint8_t 类型变量的输出,例如如下代码,会输出什么呢?

uint8_t fieldID = 67;
cerr<< "field=" << fieldID <<endl;
结果发现是:field=C 而 不是我们所想的 field=67

这是由于 typedef unsigned char uint8_t;
uint8_t 实际是一个 char, cerr << 会输出 ASCII 码是 67 的字符,而不是 67 这个数字.

因此,输出 uint8_t 类型的变量实际输出的是其对应的字符, 而不是真实数字.

若要输出 67,则可以这样:

cerr<< "field=" << (uint16_t) fieldID <<endl;

结果是:field=67

同样: uint8_t 类型变量转化为字符串以及字符串转化为 uint8_t 类型变量都要注意, uint8_t类型变量转化为字符串时得到的会是ASCII码对应的字符, 字符串转化为 uint8_t 变量时, 会将字符串的第一个字符赋值给变量.

例如如下代码:

#include <iostream>  
#include <stdint.h>  
#include <sstream>  
using namespace std;  
  
  
int main()  
{  
    uint8_t fieldID = 67;  
  
    // uint8_t --> string  
    string s;  
    ostringstream strOStream;  
    strOStream << fieldID;  
    s = strOStream.str();  
    cerr << s << endl;  
      
    // string --> uint8_t  
    s = "65";   
    stringstream strStream;  
    strStream << s;  
    strStream >> fieldID;  
    strStream.clear();  
    cerr << fieldID << endl;  
}

上述代码输出的是:
C
6

原文地址:https://www.cnblogs.com/WArobot/p/6691545.html