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

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

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

uint8_t / uint16_t / uint32_t /uint64_t数据类型详解

uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型? 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数...
  • Bruce_0712
  • Bruce_0712
  • 2017年05月29日 23:52
  • 1284

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
  • 24913

关于stdint.h(uint16_t uint32_t)

2011-11-1 关于stdint.h(uint16_t uint32_t)    stdint.h是c99中引进的一个标准C库的头文件.    stdint.h中定义了一些整数类型,规则...
  • huanghui167
  • huanghui167
  • 2011年11月01日 18:00
  • 14710

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
  • 31648

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

uint8_t / uint16_t / uint32_t /uint64_t  是什么数据类型 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是...
  • kiddy19850221
  • kiddy19850221
  • 2011年08月02日 20:57
  • 208734

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

来自:http://blog.csdn.net/zklth/article/details/7978362 uint8_t / uint16_t / uint32_t /uint64_t...
  • yukin_xue
  • yukin_xue
  • 2013年12月04日 11:30
  • 1681

uint8_t / uint16_t / uint32_t /uint64_t

这些数据类型是 C99 中定义的,具体定义在:/usr/include/stdint.h    ISO C99: 7.18 Integer types...
  • u013193026
  • u013193026
  • 2014年11月24日 09:53
  • 342

数据类型 uint8_t uint16_t uint32_t uint64_t

Roger 的 uint8_t是什么数据类型 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有...
  • zhuzhihai1988
  • zhuzhihai1988
  • 2012年07月23日 19:17
  • 2554

uint8_t / uint16_t / uint32_t /uint64_t 数据类型

typedef signed char int8_t typedef unsigned char uint8_t typedef signed int int16_t typedef unsig...
  • liangxiaojiang
  • liangxiaojiang
  • 2015年07月17日 12:11
  • 176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型
举报原因:
原因补充:

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