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

转载 2013年12月04日 11:30:24

来自: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>

  1. /* There is some amount of overlap with <sys/types.h> as known by inet code */  
  2. #ifndef __int8_t_defined  
  3. # define __int8_t_defined  
  4. typedef signed char             int8_t;   
  5. typedef short int               int16_t;  
  6. typedef int                     int32_t;  
  7. # if __WORDSIZE == 64  
  8. typedef long int                int64_t;  
  9. # else  
  10. __extension__  
  11. typedef long long int           int64_t;  
  12. # endif  
  13. #endif  
  14.   
  15. /* Unsigned.  */  
  16. typedef unsigned char           uint8_t;  
  17. typedef unsigned short int      uint16_t;  
  18. #ifndef __uint32_t_defined  
  19. typedef unsigned int            uint32_t;  
  20. # define __uint32_t_defined  
  21. #endif  
  22. #if __WORDSIZE == 64  
  23. typedef unsigned long int       uint64_t;  
  24. #else  
  25. __extension__  
  26. typedef unsigned long long int  uint64_t;  
  27. #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 变量时, 会将字符串的第一个字符赋值给变量.

例如如下代码:

  1. #include <iostream>  
  2. #include <stdint.h>  
  3. #include <sstream>  
  4. using namespace std;  
  5.   
  6.   
  7. int main()  
  8. {  
  9.     uint8_t fieldID = 67;  
  10.   
  11.     // uint8_t --> string  
  12.     string s;  
  13.     ostringstream strOStream;  
  14.     strOStream << fieldID;  
  15.     s = strOStream.str();  
  16.     cerr << s << endl;  
  17.       
  18.     // string --> uint8_t  
  19.     s = "65";   
  20.     stringstream strStream;  
  21.     strStream << s;  
  22.     strStream >> fieldID;  
  23.     strStream.clear();  
  24.     cerr << fieldID << endl;  
  25. }  

上述代码输出的是:

C

6

相关文章推荐

uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结,看完全明白了

uint8_t / uint16_t / uint32_t /uint64_t  是什么数据类型 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是...

c中数据类型uint16_t,uint32_t,uint64_t输入输出使用方法

前几天做题目,题目中要求数据类型使用uint32_t,大致一看,还以为就是int,但是在程序中把它当做int处理时出现了问题,为此在网上找了下资料 发现这个语句: typedef unsigned...

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

我想,uint8、uint16、uint32、uint64 这大家可能比较理解unit,unsigned int 嘛 uint8,我想很多人也能够理解,其实是unsigned char 那么 _t...

stdint.h 文件 int8_t uint8_t int16_t uint16_t (二)

/* The ISO C99 standard specifies that in C++ implementations these macros should only be defined if...

关于嵌入式编程中的uint8_t、uint16_t......

在嵌入式编程中经常遇到用uint8_t、uint16_t、uint32_t、uint_fast16_t之类的关键字定义一些整型变量,但是具体表示什么意思,并不是太清楚,只是把它当成int之类的整型变量...

Java实现uint8_t/uint16_t/uint32_t

在Java中,整数可以用byte,short,int和long等类型来表示,并不支持unsigned类型。然而在很多情况下Java也需要处理无符号类型,如翻译C/C++代码,与C/C++进行通讯等,这...

stm32官方库数据格式定义 uint16_t

STM32里的类型定义,见如下说明: typedef volatile unsigned short vu16;typedef __IO uint16_t vu16 /* IO definitio...

stm32类型定义详解uint8_t / uint16_t / uint32_t /ui

uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 这些数据类型是 C99 中定义的,具体定义在:/usr/include/stdint.h    I...

c/c++: uint8_t uint16_t uint32_t uint64_t size_t ssize_t数据类型

原文写的不错,转来收藏,转自:http://wangyisouhuxin.blog.163.com/blog/static/761966592011072348700/?fromdm&fromSear...
  • lzx_bupt
  • lzx_bupt
  • 2011年12月13日 14:26
  • 23337

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

uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 这些数据类型是 C99 中定义的,具体定义在:/usr/include/stdint.h    I...
  • zklth
  • zklth
  • 2012年09月14日 03:28
  • 29855
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型
举报原因:
原因补充:

(最多只允许输入30个字)