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

【genius_platform软件平台开发】第九十四讲:int64_t的格式化问题(lld和PRId64)

  • 问题起因是在进行上位机软件优化的工作安排时,同事对unsigned long long 类型的时间戳进行了格式化输出优化,从%ull优化为了% PRIu64,我进行代码合并请求处理的时候突然感觉这个可以仔细查一下。查阅到的相关资料如下:
    *在这里插入图片描述

1. int64_t 与 uint64_t

  • C的标准只规定特定数据类型需要实现的最小长度,特定类型的具体长度取决于编译器实现。为了增强程序的可移植性,C99标准增加了对固定长度的整数类型的支持。
  • 对固定长度类型的定义位于头文件 stdint.h 中。其中包括固定长度有符号整数类型 intN_t 和固定长度无符号整数类型 uintN_t,分别表示固定占用 N bits长度的整数类型( N = 8、16、32、64)。

  • 图示为CodeBlock13.12中头文件 stdint.h 对 int64_t 和 uint64_t 的定义,可以看到它们是通过对 long long 和 unsigned long long 的 typedef 声明实现的。  

2. 相应格式字符串

  • 对于定义在头文件 stdint.h 中的类型 ,其printf和scanf的格式字符串在头文件 inttypes.h 中实现。

3. printf输出

  • 对于printf使用的格式化标识符,一般格式为 PRI + format + type 。其中 format规定输出的格式,可以为 d( decimal ,十进制) 、h( hexadecimal ,十六进制) 、o( octal , 八进制)、u( unsigned ,无符号)等,type 为对应的数据类型,可以为 N 。( 实际type还可以为FASTN、LEASTN、PTR 和 MAX等,具体可见 C data types - Wikipedia ) 如对于int64_t数据类型的输出,可以使用格式标志符 PRId64。
    在这里插入图片描述

  • 这也从解释了为什么需要将 PRIu64 独立书写,这是由于使用格式化字符串" %PRIu64 “时,编译器会将 " " 间的所有字符均视为字符串的一部分,这样在预处理阶段便无法对 PRIu64 的宏定义进行替换。将PRIu64独立出来后,其会在预编译阶段被替换为” I64u " (注意这里替换的结果包含引号),即格式化字符串变为 " % " " I64u " “\n”,在C语言中被当作“ %I64u\n”处理,从而保证结果正确输出。

4. scanf输入

  • 对应的scanf使用的格式化标识符,一般格式为 SCN + format + type。其中 format规定输出的格式,可以为 d( decimal ,十进制) 、h( hexadecimal ,十六进制) 、o( octal , 八进制)、u( unsigned ,无符号)等,type 为对应的数据类型,可以为 N 。

  • scanf的格式化标志符与printf中的定义方法大致相同,在头文件 inttypes.h 中存在相应的宏定义,如对无符号类型的输入的标识符如下图所示
      在这里插入图片描述

5. unsigned long long 与 long long 类型的输入与输出

  • 在CodeBlocks的头文件 stdint.h 中存在如下表述:
      在这里插入图片描述

  • 一般而言C语言标准给出的 unsgned long long 与 long long 的格式化标识符分别为 llu 与 lli,但实在Windows环境下编译时,可能尚未提供对 " ll " 格式化标志符的支持,使得使用了以上两种格式化标识符的类型无法被正确识别。一种可行的解决方法是使用上述 int64_t 与 uint64_t 的格式化标识符,因为从头文件 stdint.h 的定义中我们可以发现,int64_t 与 uint64_t 分别就是 long long 与 unsigned long long 的 typedef 定义,故而可以使用 PRId64 和 PRIu64 来对 long long 类型与 unsigned long long 类型进行输出。

  • 需要注意的是,不同的机器和编译器对 int64_t 和 uint64_t 的实现可能并不相同,故而最好先在头文件 stdint.h 中确认具体的定义后再根据具体的定义使用对应的格式化标识符。

相关文章:

【genius_platform软件平台开发】第九十四讲:int64_t的格式化问题(lld和PRId64)

问题起因是在进行上位机软件优化的工作安排时,同事对unsigned long long 类型的时间戳进行了格式化输出优化,从%ull优化为了% PRIu64,我进行代码合并请求处理的时候突然感觉这个可以仔细查一下。查阅到的相关资料如下: * 1. int6…...

多模态之clip

论文:Learning Transferable Visual Models From Natural Language Supervision Github:https://github.com/OpenAI/CLIP OpenAI出品 论文通过网络爬取4亿(image, text)对,使用对比学习的方法训练得到clip(Contrastive Languag…...

Lombok常用注解

文章目录 一、简介二、Idea中配置三、Maven中配置四、相应注解1、Data2、RequiredArgsConstructor3、AllArgsConstructor4、NoArgsConstructor5、Getter/Setter:6、ToString7、EqualsAndHashCode8、Builder9、NonNull10、Log11、Slf4j12、Log4j213、SneakyThrows14、Cleanup15、…...

加拿大各省接受公立教育的初始年龄汇总 — 供携子女赴加的访学、博后参考

近年来到加拿大从事访问学者和博士后研究的申请者日益增多,有些申请者想带孩子同去上公立学校。因为加拿大各省教育局政策有差异,所以入学(包括学前班)年龄不同,为此知识人网小编整理本文为大家解惑答疑。 加拿大为本国…...

数字化工厂:虹科Vuzix AR眼镜在工业制造中的革新应用

随着现代科学技术和新兴需求的快速增长,增强现实(AR)、各种“现实”产品与技术不断涌入创新市场,新兴用例数量正在快速增长,可以肯定,在可预见的未来,AR技术将成为各行各业的生产与工作主流。 增强现实(AR&…...

配置出接口方式的单服务器智能DNS

组网需求 如图1所示,企业部署了一台ISP1服务器对外提供Web服务,域名为www.example.com。ISP1服务器的私网IP地址为10.1.1.10,服务器映射后的公网IP地址为1.1.1.10。企业的DNS服务器上存在域名www.example.com与ISP1服务器地址1.1.1.10的对应关…...

数据结构初阶(栈和队列)

文章目录 一、栈1.1 什么是栈1.2 栈的使用(1)底层代码(2)方法(3)栈的应用 二、队列2.1 什么是队列2.2 队列的使用(1)底层代码的实现(2)队列的使用 2.3 双端队…...

IDEA实用设置

1、设置全局编码统一为UTF-8 file>setting中搜索框输入file encoding修改格式为UTF-8 2、设置文字大小 file>setting中搜索框输入font修改字体大小 3、配置maven file>setting中搜索框输入maven修改maven的路径、conf文件、文件仓库 4、idea中实现Serializable提示…...

关联爆破-RSA分解

今天遇到一个RSA题,给出n和pq求分解,翻箱倒柜也没找着原来写的程序,这里重写一下。都是编程的活。 第1种情况,给出p^q 这种情况当p,q相同位相同时为0,不同时为1,爆破的时候只需要逐位判断两种情况&#x…...

Netty内存管理--内存池PoolArena

一、写在前面 到这里, 想必你已知道了Netty中的内存规格化(SizedClass), Page和SubPage级别的内存分配, 但是具体使用者不应该关心应该申请page还是subpage。而且从过去的经验来说, 申请page/subpage的数量也是个动态值, 如果申请使用完之后就释放那使用内存池的意义就不大。N…...

RabbitMQ 发布订阅模式,routing路由模式,topic模式

发布订阅模式 一个消息可以由多个消费者消费同一个消息 消费者1和2同时消费了该消息 举例 public static void main(String[] args) throws IOException, TimeoutException {//1 创建连接工厂ConnectionFactory connectionFactorynew ConnectionFactory();//2 设置rabbitmq …...

又一款可视化神器,开源了!

在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的 BI 工具。 借助这些 BI 工具,我们能够大幅提升数据分析效率、生成更高质量的项目报告,让用户通过直观的数据看到结果,减低沟通成…...

干货 | 中科院心理所考研复试经验分享

Hello,大家好! 这里是壹脑云科研圈,我是喵君姐姐~ 此时此刻,23年考研的小伙伴估计正在为复试进行准备吧,大家都准备得怎么样了呢? 今天为大家带来的就是我国顶级心理学研究结构—中科院心理所…...

Redis基础知识概述

Redis基础知识概述 文章目录 Redis基础知识概述一、Redis简介二、NoSQL技术三、Redis的高并发和快速原因四、Redis为什么是单线程的 五、单线程的优劣势1、优势2、劣势 六、Redis高并发总结七、在java中使用Redis1、添加Jedis依赖 八、Redis在Java Web中的应用1、存储缓存用的数…...

开心档之C++ 引用

C 引用 引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。 C 引用 vs 指针 引用很容易与指针混淆,它们之间有三个主要的不同:…...

后台优化主要分为哪些?工作内容及流程是什么?

什么是5G网络优化? 顾名思义就是对4G/5G无线网络进行测试,分析,优化的专业技术工作。网络优化工作的进展程度,直接关系着我们对4G/5G无线网络的使用体验。 网络优化工程师通过对现已运行的手机通话网络进行话务数据分析、现场测…...

二叉树及其遍历

文章目录 二叉树树的定义二叉树的定义遍历先序遍历中序遍历后序遍历层次遍历定义队列层次创建二叉树层次遍历 二叉树 树是一种非线性的数据结构,由若干个节点组成,节点之间存在一种父子关系,具有层次结构。二叉树是一种特殊的树结构&#xff…...

java 版本企业电子招投标采购系统源码之登录页面

​ 信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…...

第五章 使用RAID与LVM磁盘阵列技术

第五章 使用RAID与LVM磁盘阵列技术 一、RAID磁盘冗余阵列 1、部署磁盘阵列 (1)、RAID0、1、5、10方案技术对比 RAID级别最少硬盘可用容量读写性能安全性特点02nn低追求最大容量和速度,任何一块盘损坏,数据全部异常。12n/2n高追…...

LeetCode 560. 和为 K 的子数组

LeetCode 560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入:nums [1,2,3], k 3 …...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...