编程参考 - stdint.h头文件的使用

在嵌入式系统软件开发上,对不同的平台,其每个机器字长都可能不同。在这个硬件平台上使用int,可能是4个字节,你做一个很大整数的运算也没问题。

但换个硬件平台,int可能变成了2个字节,那你运行一个大整数运算,就可能会溢出。所以软件移植时就要注意。

还有一些操作,是和变量占用的字节长度有关的。比如使用一个16位的寄存器的值,在32位的机器上要用short int类型来表示,在16位机器上,就用int类型来表示。

那为了方便代码的移植,最好使用固定字节长度的变量,比如在定义整数时加上使用的是几个字节或多少位。

比如:

typedef char byte_t;

typedef short int byte2_t;

typedef int byte4_t;

这些都是程序员自己定义的,来保证软件的实现和硬件平台的无关性,使代码可以跨平台使用。

比如一些最早期的嵌入式项目的代码中, 都会有个专门的类型定义的头文件,使基本类型的字节长度不依赖于平台。

为了方便开发者,C99引入了<stdint.h>,C++11引入了<cstdint>,里面定义了固定字节宽度的类型。

To help with cross-platform portability, C99 defined a set of fixed-width integers (in the stdint.h header) that are guaranteed to have the same size on any architecture.

所以我们开发中,如果有条件就用新一些的C标准库,直接使用标准库头文件stdint.h即可,而不用考虑平台特性。

标准库已经把平台特性屏蔽了,不用我们去考虑硬件平台的细节。

包含这个头文件后,就可以使用下面这些类型定义了:

int8_t

int16_t

int32_t

int64_t

uint8_t

uint16_t

uint32_t

uint64_t

指针的话就使用:(void* 指针类型是通用的,其他指针可以直接赋值给void*)

intptr_t   // 整数指针

uintptr_t  // 无符号整数指针

参考glibc 2.38里的头文件声明:

/* Types for `void *' pointers.  */

#if __WORDSIZE == 64

# ifndef __intptr_t_defined

typedef long int        intptr_t;

#  define __intptr_t_defined

# endif

typedef unsigned long int    uintptr_t;

#else

# ifndef __intptr_t_defined

typedef int            intptr_t;

#  define __intptr_t_defined

# endif

typedef unsigned int        uintptr_t;

#endif

===== 分割线 ===== 

c17 standard 

7.20 Integer types <stdint.h> [整数类型 <stdint.h>]

1 头文件 <stdint.h> 声明了具有指定宽度的整数类型集,并定义了相应的宏集。它还定义了宏,用于指定与其他标准头文件中定义的类型相对应的整数类型的限制。

2 类型定义分为以下几类:

- 具有一定精确宽度的整数类型;

- 至少具有特定宽度的整数类型;

- 至少具有某些指定宽度的最快整数类型;

- 宽度足以容纳对象指针的整数类型;

- 宽度最大的整数类型。

(其中一些类型可能表示同一类型)。

3 相应的宏指定所声明类型的最大最小范围,并定义了相应的常量来表示。

4 对于本文描述的每种类型,只要实现提供了,则 <stdint.h> 应声明该类型定义名称并定义相关宏。反之,对于本文描述的、实现没有提供的每种类型,<stdint.h> 不应声明该类型定义名称,也不应定义相关宏。实现应提供描述为 "必需 "的类型,但不必提供剩下的其他类型(描述为 "可选")。

1 The header <stdint.h> declares sets of integer types having specified widths, and defines corresponding sets of macros. It also defines macros that specify limits of integer types correspondingto types defined in other standard headers.

2 Types are defined in the following categories:

— integer types having certain exact widths;

— integer types having at least certain specified widths;

— fastest integer types having at least certain specified widths; 

— integer types wide enough to hold pointers to objects;

— integer types having greatest width.

Some of these types may denote the same type.)

3 Corresponding macros specify limits of the declared types and construct suitable constants.

4 For each type described herein that the implementation provides, <stdint.h> shall declare that typedef name and define the associated macros. Conversely, for each type described herein that the implementation does not provide, <stdint.h> shall not declare that typedef name nor shall it define the associated macros. An implementation shall provide those types described as “required”, but need not provide any of the others (described as “optional”).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第30天|332.重新安排行程 |51. N皇后 |37. 解数独

代码随想录算法训练营第30天|332.重新安排行程 |51. N皇后 |37. 解数独 今天这三道题都非常难&#xff0c;那么这么难的题&#xff0c;为啥一天做三道&#xff1f; 因为 一刷 也不求大家能把这么难的问题解决&#xff0c;所以 大家一刷的时候&#xff0c;就了解一下题目的要求…

【Flask开发实战】学习web和url开发基础

Web&#xff08;World Wide Web&#xff09;是一种全球性的信息系统&#xff0c;它通过互联网连接了世界各地的计算机和网络&#xff0c;使用户能够访问和共享各种资源&#xff0c;如网页、图像、视频等。URL&#xff08;Uniform Resource Locator&#xff09;则是一种用于标识…

YOLOv3学习

YOLOv3仅使用卷积层&#xff0c;使其成为一个全卷积网络&#xff08;FCN&#xff09;。文章中&#xff0c;作者提出一个新的特征提取网络&#xff0c;Darknet-53。正如其名&#xff0c;它包含53个卷积层&#xff0c;每个后面跟随着batch normalization层和leaky ReLU层。没有池…

【网络原理】HTTP 请求 (Request)详解

文章目录 &#x1f38d;请求格式&#x1f384;认识URL&#x1f338;query string&#x1f338;关于 URL encode &#x1f340;认识 “方法” (method)&#x1f338;GET方法&#x1f338;POST 方法&#x1f338;GET 和 POST 的区别 &#x1f332;认识请求 “报头” (header)&…

权限管理系统-0.5.0

六、审批管理模块 审批管理模块包括审批类型和审批模板&#xff0c;审批类型如&#xff1a;出勤、人事、财务等&#xff0c;审批模板如&#xff1a;加班、请假等具体业务。 6.1 引入依赖 在项目中引入activiti7的相关依赖&#xff1a; <!--引入activiti的springboot启动器…

Git进阶命令-reset

一、reset命令使用场景 有时候我们提交了一些错误的或者不完善的代码&#xff0c;需要回退到之前的某个稳定的版本,面对这种情况有两种解决方法: 解决方法1&#xff1a;修改错误内容&#xff0c;再次commit一次 解决方法2&#xff1a;使用git reset 命令撤销这一次错误的com…

为wordpress后台添加一个自定义页面

非插件线代码方式实现为wordpress后台添加一个自定义页面 参数如下&#xff1a; $page_title (string) – The text to be displayed in the title tags of the page when the menu is selected. $menu_title (string) – The text to be used for the menu. $capability (st…

汽车KL15、KL30、ACC的区别

文章目录 前言一、KL30是什么&#xff1f;二、KL15是什么&#xff1f;KL15信号的演变 三、为啥用KL15、KL30呢&#xff1f; 前言 相信刚接触汽车电子的伙伴都会有一个疑惑&#xff0c;什么是KL15?什么是KL30? 内心一脸懵逼…… KL是德语Klemme的缩写&#xff0c;指的是ECU的…

RCE漏洞

RCE漏洞概述 远程命令执行/代码注入漏洞&#xff0c;英文全称为Reote Code/CommandExecute&#xff0c;简称RCE漏洞。PHPJava等Web开发语言包含命令执行和代码执行函数,攻击者可以直接向后台服务器远程执行操作系统命今或者运行注入代码&#xff0c;进而获取系统信息、控制后台…

2023年五级区划省市县乡镇行政村社区边界数据

行政区划数据是重要的基础地理信息数据&#xff0c;根据国家统计局公布的数据&#xff0c;行政区划共分为五级&#xff0c;分别为省级、地级、县级、乡镇/街道级、村/社区级。 该套数据以2020-2023年国家基础地理信息数据中的县区划数据作为矢量基础&#xff0c;辅以高德行政区…

Spring Security源码

WebSecurityConfigurerAdapter已废弃&#xff0c;官方推荐使用HttpSecurity 或WebSecurity。 都继承了SecurityBuilder public interface SecurityBuilder<O> {O build() throws Exception;}亮点&#xff1a;通过这种方式很容易知道知道自己构建的Object HttpSecurit…

Shell脚本学习-if循环

最小化的if语句 无实际用途 if [ ] ;then echo fi 脚本解释 if 判断 [ ] 里面的条件是否成立 后面跟then&#xff0c;代表条件成立 如果在一行则使用分号隔离&#xff08;;&#xff09; 如果不在一行使用则直接在下一行驶入then即可。 如果条件成立则输出echo 后面…

IT管理备考TOGAF10证书有哪些好处?

现今&#xff0c;随着信息技术的快速发展&#xff0c;企业对于高效的IT管理需求日益增长。而TOGAF10证书作为全球公认的企业架构管理标准&#xff0c;成为了IT管理者的必备工具。本文将为您详细介绍TOGAF10证书的好处&#xff0c;以助您更好地了解和利用这一强大的工具。 首先&…

大模型主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning 并训练自己的数据集

大模型主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning 概述 大模型微调(finetuning)以适应特定任务是一个复杂且计算密集型的过程。本文训练测试主要是基于主流的的微调方法:LoRA、Adapter、Prefix-tuning、P-tuning和Prompt-tuning,并对…

金蝶云星空——单据附件上传

文章目录 概要技术要点代码实现小结 概要 单据附件上传 技术要点 单据附件上传金蝶是有提供标准的上传接口&#xff1a; http://[IP]/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.AttachmentUpLoad.common.kdsvc 参数说明 参数类型必填说明FileName字符是…

Vue3+JS:实现进度条拖拽

一、效果 二、代码实现 <template><div class"bar" ref"bar"><div class"slider" :style"Pos" mousedown"mousedown"></div></div> </template> <script setup lang"ts"…

8.2K star!史上最强Web应用防火墙

&#x1f6a9; 0x01 介绍 长亭雷池SafeLine是长亭科技耗时近 10 年倾情打造的WAF(Web Application Firewall)&#xff0c;一款敢打出口号 “不让黑客越雷池一步” 的 WAF&#xff0c;我愿称之为史上最强的一款Web应用防火墙&#xff0c;足够简单、足够好用、足够强的免费且开源…

无人机拦截

配置yolo CUDA报错 nvcc fatal : Unsupported gpu architecture compute_30.&#xff08;1&#xff09;查看显卡匹配型号&#xff1a;https://blog.csdn.net/u013308762/article/details/121658823 &#xff08;2&#xff09;查看显卡&#xff1a;nvidia-smi -a 》NVIDIA GeF…

60 个深度学习教程:包含论文、实现和注释 | 开源日报 No.202

labmlai/annotated_deep_learning_paper_implementations Stars: 44.0k License: MIT annotated_deep_learning_paper_implementations 是一个包含深度学习论文的 60 个实现/教程&#xff0c;附带并排注释&#xff1b;包括 transformers&#xff08;原始、xl、switch、feedbac…

Spring MVC(二)-过滤器与拦截器

过滤器和拦截器在职责和使用场景上存在一些差异。 过滤器 拦截器 作用 对请求进行预处理和后处理。例如过滤请求参数、设置字符编码。 拦截用户请求并进行相应处理。例如权限验证、用户登陆检查等。 工作级别 Servlet容器级别&#xff0c;是Tomcat服务器创建的对象。可以…