当前位置: 首页 > news >正文

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

转自:http://blog.csdn.net/kiddy19850221/article/details/6655066

 

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

 

在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 <marekm@linux.org.pl>
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

相关文章:

  • Linux用户和权限管理
  • iOS 宏(define)与常量(const)的正确使用
  • linux系统安装python2.7
  • phoenixframework自动化测试平台webUI模块执行js代码示例
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Microphone Array Post-Filtering
  • 团队项目——工大助手界面(查询部分)
  • linux系统调优
  • last命令
  • easyui扩展tabs
  • 初心大陆-----python宝典   第三章
  • Navicat远程连接MySQL数据库
  • 【Android开发日记】Popupwindow 完美demo
  • Git代码仓库的建立流程
  • 从0开始学习 Git
  • Angular 响应式表单之下拉框
  • AWS实战 - 利用IAM对S3做访问控制
  • EOS是什么
  • httpie使用详解
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • python docx文档转html页面
  • Spring Boot MyBatis配置多种数据库
  • Twitter赢在开放,三年创造奇迹
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 思考 CSS 架构
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 小而合理的前端理论:rscss和rsjs
  • 栈实现走出迷宫(C++)
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • $.ajax中的eval及dataType
  • (30)数组元素和与数字和的绝对差
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (算法二)滑动窗口
  • (一)插入排序
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)EOS中账户、钱包和密钥的关系
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .cn根服务器被攻击之后
  • .Net(C#)自定义WinForm控件之小结篇
  • .net的socket示例
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .NET正则基础之——正则委托
  • @EventListener注解使用说明
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • @private @protected @public
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C++]:for循环for(int num : nums)
  • [C++]二叉搜索树
  • [CISCN2019 华东南赛区]Web4
  • [CSS]CSS 的背景
  • [docker]docker网络-直接路由模式
  • [Flutter]打包IPA