在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么又是u又是_t的?很多人有这样的疑问。论坛上就有人问:以*_t结尾的类型是不是都是long型的?在baidu上查一下,才找到答案,这时才发觉原来自己对C掌握的太少。

那么_t的意思到底表示什么?具体的官方答案没有找到,不过我觉得有个答案比较接近。它就是一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是其它数据类型。

uint8_t,uint16_t,uint32_t等都不是什么新的数据类型,它们只是使用typedef给类型起的别名,新瓶装老酒的把戏。不过,不要小看了typedef,它对于你代码的维护会有很好的作用。比如C中没有bool,于是在一个软件中,一些程序员使用int,一些程序员使用short,会比较混乱,最好就是用一个typedef来定义,如: typedef char bool;

一般来说,一个C的工程中一定要做一些这方面的工作,因为你会涉及到跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码。为了用户的方便,C99标准的C语言硬件为我们定义了这些类型,我们放心使用就可以了。

按照posix标准,一般整形对应的*_t类型为: 1字节     uint8_t 2字节     uint16_t 4字节     uint32_t 8字节     uint64_t

附:C99标准中inttypes.h的内容 00001 /* 00002    inttypes.h 00003 00004    Contributors: 00005      Createdby Marek Michalkiewicz 00006 00007    THISSOFTWARE IS NOT COPYRIGHTED 00008 00009    Thissource code is offered for use in the public domain.  You may 00010    use,modify or distribute it freely. 00011 00012    Thiscode is distributed in the hope that it will be useful, but 00013    WITHOUTANY WARRANTY.  ALLWARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00014    DISCLAIMED.  This includes but is not limited towarranties of 00015    MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE. 00016  */ 00017 00018 #ifndef __INTTYPES_H_ 00019 #define __INTTYPES_H_ 00020 00021 /* Use [u]intN_t if you need exactly N bits. 00022    XXX- doesn't handle the -mint8 option.  */ 00023 00024 typedefsigned char int8_t; 00025 typedefunsigned char uint8_t; 00026 00027 typedefint int16_t; 00028 typedefunsigned int uint16_t; 00029 00030 typedeflong int32_t; 00031 typedefunsigned long uint32_t; 00032 00033 typedeflong long int64_t; 00034 typedefunsigned long long uint64_t; 00035 00036 typedefint16_t intptr_t; 00037 typedefuint16_t uintptr_t; 00038 00039 #endif

------------

1>. 在写程序时注意"无符号类型"的使用, 各种类型边界值的情况.

如:

a>

当某个数据不可能为负数时我们一定要考虑用以下类型:

unsigned char,

unsigned int, uint32_t, size_t, uint64_t, unsigned long

int,

b> 当有些数据你不知道是正负时一定不要用"a>"中的类型,

不然他永远也不可能为负.

c> 数据的边界值要多注意, 如:

uint32_t a, b, c;

uint64_t

m;

m = a * b + c;

在该运算中可能出现错误,

"a*b"的类型可能超过uint32_t的最大值,这时一定不要忘了类型转换.

m

= ((uint64_t)a) * b + c;

2>. 在适当的时候要会自我定义数据类型.

我们都知道linux C开发中的常见扩展数据类型的定义有:uint8_t, uint16_t, uint32_t, uint64_t, size_t,

ssize_t, off_t .... 他之所以要自己定义出数据类型是有道理的, 如: typdef unsigned int uint32_t;

表示uint32_t为32位无符号类型数据, 其实size_t也是32位无符号数据类型, 为什么不直接写"unsigned int"呢?

为了程序的可扩展性, 假如将来我们需要的数据大小变成了64bit时,我们只需要将typedef long long size_t就可以了,

不然我们可要修改好多好多的地方了.

这种设计我们同样可以应用到自己的开发中来,当自己设计一个int类型保存某种数据时,但你又没把握将来是不是要用long

int时你可以引用一个自己定义的数据类型的啊!

stdint.h

-----------------------------

typedef

unsigned int

uint32_t;

uint32_t.c

-----------------------------

#include

#if 0

#include

//

uint32_t

#endif

typedef

unsigned int uint32_t;

typedef

unsigned long long

uint64_t;

int

main()

{

uint32_t

a;

a =

12;

printf("a = %x\n",

a);

printf("sizeof(a) = %d\n",

sizeof(a));

uint64_t

b;

b =

12;

printf("b = %x\n",

b);

printf("sizeof(b) = %d\n",

sizeof(b));

}

a = c

sizeof(a) = 4

b =

c

sizeof(b) = 8

java uint16 t_uint8_t / uint16_t / uint32_t /uint64_t 的简单介绍相关推荐

  1. uint8_t / uint16_t / uint32_t /uint64_t 的简单介绍

    uint8_t / uint16_t / uint32_t /uint64_t 的简单介绍 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等.咋一看,好像是个新的数据类型,不过 ...

  2. C 语言编程 — uint8_t / uint16_t / uint32_t /uint64_t

    目录 文章目录 目录 uint8_t\uint_16_t\uint32_t\uint64_t 格式化输出 uint8_t\uint_16_t\uint32_t\uint64_t 在 C99 标准(IS ...

  3. uint8_t / uint16_t / uint32_t /uint64_t 数据类型大总结

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

  4. uint8_t / uint16_t / uint32_t /uint64_t  有什么区别?

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

  5. [u]intN_t - uint8_t, uint16_t, uint32_t, uint64_t

    uint8_t, uint16_t, uint32_t, uint64_t 在c/c++中,很多以_t结尾的数据类型,如uint8_t,size_t等等,乍一看什么鬼,实际上_t的意思就是typede ...

  6. uint8_t / uint16_t / uint32_t /uint64_t 数据类型集中网上的解释

    uint8_t / uint16_t / uint32_t /uint64_t  是什么数据类型,在嵌入式编程中经常会遇见. 首先 #define uint unsigned int; int和uin ...

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

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

  8. uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结

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

  9. 浅析C语言之uint8_t / uint16_t / uint32_t /uint64_t

    一.C语言基本数据类型回顾 在C语言中有6种基本数据类型:short.int.long.float.double.char 1.数值类型 1)整型:short.int.long 2)浮点型:float ...

  10. [c++]-uint8_t,uint16_t,uint32_t,uint64_t代表含义及其标准定义

    c++基础数据类型 首先来看一张c++基础数据类型的列表 下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值. 注意:不同系统会有所差异,一字节为 8 位. ...

最新文章

  1. code blocks 代码颜色_vuepress中实现代码折叠、高亮
  2. python3 windows环境 安装加密库 crypto
  3. 使用GAN进行异常检测——可以进行网络流量的自学习哇,哥哥,人家是半监督,无监督的话,还是要VAE,SAE。...
  4. jstl标签的用法 fn标签
  5. c语言素数个数_C语言试题及答案
  6. Lucene学习总结之三:Lucene的索引文件格式(1)
  7. oracle中NUMBER(10,2)含义
  8. Linux 命令(60)—— strip 命令
  9. Mysql数据库中,大小写区分
  10. Shell 脚本语法
  11. docker安装oracle11g史上最全步骤(带图文)
  12. SQL注入漏洞-MySQL盲注
  13. matlab中if语句的条件,matlabif条件语句
  14. 华为这个广告,我愿一辈子不买苹果!
  15. JNI中创建新的线程回调java方法的技巧
  16. 8.14. JSON Types
  17. 中国存储器“3+1”版图初现 行业要再跑5年马拉松
  18. [转载] 细看名字服务中心
  19. 初识log4j与ssm整合
  20. 【Vue2】vue2全内容整理

热门文章

  1. 关于微信支付后回调验证的处理
  2. java4选择结构 二
  3. 提交表单的时候会出现提交两次的问题
  4. TP5.1中的验证类 validate用法
  5. CAS实现单点登录SSO执行原理探究超详细
  6. Ubuntu 16.04下Linux驱动编写第一步
  7. selenium配置
  8. Java排序算法——归并排序
  9. 2011-8-13 随笔一二
  10. 和商简智能CEO关于APS的聊后感