C语言之unsigned long long与struct相互转换实例(五十六)

news2024/9/21 19:02:42

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.unsigned long long与struct相互转换介绍
      • 从 `unsigned long long` 到 `struct` 的转换
      • 从 `struct` 到 `unsigned long long` 的转换
      • 注意事项
    • 🌻3.代码实例
      • 🐓3.1 结构体转unsigned long long并输出

🌻1.前言

本篇目的:C语言之unsigned long long与struct相互转换实例

🌻2.unsigned long long与struct相互转换介绍

  • unsigned long long 是一种数据类型,用于表示无符号的64位整数。而 struct 是一种构造数据类型,可以将多个不同类型的数据项组合成一个单一的复合类型。在C/C++中,将 unsigned long longstruct 相互转换通常涉及到位操作和内存布局的考虑。

unsigned long longstruct 的转换

  • unsigned long long 转换为 struct 需要确保 struct 的大小不超过8字节,并且成员的排列方式要与64位整数的位模式兼容。转换过程中,可以直接将 unsigned long long 的位模式复制到 struct 的内存中。这种转换通常通过 memcpy 函数实现,该函数会将源地址的数据按字节复制到目标地址。

structunsigned long long 的转换

  • struct 转换为 unsigned long long 的过程与上述相反。同样需要使用 memcpy 函数,将 struct 的内存内容复制到 unsigned long long 类型的变量中。这个过程中,struct 的每个成员的位模式将被重新解释为一个64位的整数。

注意事项

  • 在进行 unsigned long longstruct 的相互转换时,需要注意以下几点:
  1. 结构体的大小:确保 struct 的大小不超过8字节,否则转换可能会导致数据丢失或未定义行为。
  2. 内存布局:struct 的成员布局必须与64位整数的位模式兼容。这包括成员的顺序、大小和对齐方式。
  3. 数据对齐:某些平台对数据对齐有严格要求,不正确的对齐可能会导致性能下降或程序崩溃。
  4. 可移植性:由于不同编译器或平台可能对内存布局有不同的处理方式,直接操作位模式的转换代码可能不具备可移植性。
  5. 类型兼容性:确保 struct 的每个成员类型与 unsigned long long 的位宽度兼容,避免数据截断或扩展。
  • 通过这些转换,可以在不同的数据表示之间灵活切换,以适应特定的编程需求或优化目的。然而,由于涉及到底层的内存操作,这种转换应该谨慎使用,并在充分理解其潜在风险的情况下进行。

🌻3.代码实例

🐓3.1 结构体转unsigned long long并输出

#include <stdio.h>
#include <string.h>

typedef struct TEST{
  int count;
  char str[64];
}TEST;

int main(){
  TEST tt = {100,"Happy Every Day!"};
  unsigned long long ul = (unsigned long long)(&tt);
  printf("count = %d, str = %s\n",((TEST*)ul)->count,((TEST*)ul)->str);
}

  • 注意:ul存放的是结构体地址&tt,在64位平台,它占8个byte。

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

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

相关文章

数学希腊符号

1、Α α alpha /a:lf/ 阿尔法 2、Β β beta /bet/ 贝塔 3、Γ γ gamma /ga:m/ 伽马 4、Δ δ delta /delt/ 德尔塔 5、Ε ε epsilon /epsilon/ 伊普西龙 6、Ζ ζ zeta /zat/ 截塔 7、Η η eta /eit/ 艾塔 8、Θ θ thet /θit/ 西塔 9、Ι ι iot /aiot/ 约塔 10、Κ κ …

ADHD儿童康复的灯塔,专业与爱共筑希望之桥

在自闭症及注意缺陷多动障碍&#xff08;ADHD&#xff09;儿童教育领域&#xff0c;专业的康复学校扮演着至关重要的角色。这些学校不仅为孩子们提供科学的康复训练&#xff0c;还致力于帮助他们融入社会&#xff0c;实现自我价值。 以星启帆自闭症儿童康复机构为例&#xff0c…

【系统架构设计师】二十四、安全架构设计理论与实践③

目录 五、网络安全体系架构设计 5.1 OSI安全架构 5.2 认证框架 5.3 访问控制框架 5.4 机密性框架 5.5 完整性框架 5.6 抗抵赖框架 往期推荐 五、网络安全体系架构设计 5.1 OSI安全架构 OSI定义了7层协议&#xff0c;其中除第5层(会话层)外&#xff0c;每一层均能提供相…

NetAssist免费下载使用

这种TCPUDP的局域网工具有很多&#xff0c;但是找起来很麻烦&#xff0c;在微信小程序里面发现了一个“TCPUDP局域网小助手”的工具&#xff0c;打开即用非常方便&#xff0c; 打开之后长这样 能下载电脑端NetAssist

使用RK Docker环境编译RK SDK

文章目录 前言Docker介绍实验环境获取RK Docker镜像加载RK Docker镜像使用RK Docker环境编译SDK其它 前言 作为一名嵌入式Linux的学习者&#xff0c;目前编译各种平台&#xff0c;用的都是同一个编译机&#xff08;Ubuntu虚拟机&#xff09;。之前一直在折腾全志&#xff0c;所…

GraphRag本地测试

测试环境&#xff1a;win10 python3.11.9 graphRAG的安装还是很简单的&#xff0c;直接pip pip install graphrag 但要注意&#xff0c;官方说了需要 python3.10-3.12 安装完成后&#xff0c;建立一个文件夹&#xff0c;存放你的知识数据&#xff0c;目前graphRAG仅支持txt和…

Mysql错误:InnoDB: page_cleaner

今天一大早就收到同事昨晚发过来的信息&#xff1a;某省份的充电桩在昨晚22点到23点期间大量挂单即充电不能结算。首先想到的就是订单服务挂了&#xff0c;可查了数据一切正常。所以继续早跑&#xff0c;等上班回公司再查查原因。 来到公司查看了昨晚的项目日记情况&#xff0c…

使用Markdown画图

大部分 Markdown 编辑器的画图功能都是基于 mermaid 的&#xff0c;因此我们先介绍下它。 ‍ 什么是 mermaid ​ ‍ mermaid 是一个开源的项目&#xff0c;旨在通过纯文本的形式来画图&#xff0c;支持流程图&#xff0c;时序图&#xff0c;甘特图&#xff0c;类图&#x…

Arduino PID库 (1)– 简介

Arduino PID库 &#xff08;1&#xff09;– 简介 pid内容索引-CSDN博客pid术语及整定原则参考&#xff1a;手把手教你看懂并理解Arduino PID控制库——引子)库的改进QuickPID-sTune库 原文地址 随着新的Arduino PID库的发布&#xff0c;最后一个库虽然很可靠&#xff0c;但…

浅谈AC自动机算法(c++)

文章目录 自动机一些简单的自动机&#xff1a; AC 自动机字典树构建失配指针构建指针 [HNOI2006] 最短母串问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路AC代码 「一本通 2.4 例 1」Keywords SearchAC代码 自动机 自动机是什么&#xff1f; 自动机的作…

Linux小组件:gcc

gcc 是C语言的编译器&#xff0c;在Linux下我们也用这个编译C语言 安装gcc sudo apt install build-essential 查看gcc版本信息 gcc --version 有时候会出现代码编译不过去的问题&#xff0c;通常可能是gcc的编译标准太低&#xff0c;不支持某些写法 比如在很多旧的编译标…

rk3588 部署yolov8.rknn

本文从步骤来记录在rk3588芯片上部署yolov8模型 主机&#xff1a;windows10 VMware Workstation 16 Pro 硬件&#xff1a;RK3588 EVB板 模型&#xff1a; RK3588.rknn 软件开发环境&#xff1a; c cmake step1: 主机上执行&#xff1a; 将rknn_model_zoo 工程文件下载…

spring:标签property

标签property对应于bean类公开的JavaBean setter方法。标签property的属性中&#xff0c;name为属性名&#xff0c;type为“”引号里面的类型&#xff0c;use为是否必须出现。 1.ref引用一个已经存在的对象,value创建一个新的对象 2.value可以赋一些简单类型的值&#xff0c;…

【MySQL】常用数据类型

目录 数据类型 数据类型分类 数值类型 tinyint类型 bit类型 小数类型 float decimal 字符串类型 char varchar 日期和时间类型 enum和set 数据类型 数据类型分类 数值类型 tinyint类型 tinyint类型只占用一个字节类似于编程语言中的字符char。有带符号和无符号两…

【系统架构设计师】二十四、安全架构设计理论与实践②

目录 三、系统安全体系架构规划框架 3.1 信息系统安全体系规划 3.2 信息系统安全规划框架 3.2.1 信息系统安全规划依托企业信息化战略规划 3.2.2 信息系统安全规划需要围绕技术安全、管理安全、组织安全考虑 3.2.3 信息系统安全规划以信息系统与信息资源的安全保护为核心…

Java——多线程(6/9):线程池、处理Runnable、Callable任务(认识线程池-线程池的工作原理,ThreadPoolExecutor构造器)

目录 认识线程池 介绍 线程池的工作原理 如何创建线程池 介绍 ThreadPoolExecutor构造器 代码实例 线程池的注意事项 线程池处理Runnable任务 ExecutorService的常用方法 代码实例 新任务拒绝策略 线程池处理Callable任务 ExecutorService的常用方法 代码实例…

二叉树的前序遍历 - 力扣(LeetCode)C语言

144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09;(点击前面链接即可查看题目) 一、题目 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; …

Datawhale AI 夏令营——AI+逻辑推理——Task4

# Datawhale AI 夏令营 夏令营手册&#xff1a;从零入门 AI 逻辑推理 比赛&#xff1a;第二届世界科学智能大赛逻辑推理赛道&#xff1a;复杂推理能力评估 代码运行平台&#xff1a;魔搭社区 赛题任务 本次任务主要采用大语言模型解决推理任务&#xff0c;如何使用大语言模…

Python3 第六十一课 -- 实例三十

目录 一. 堆排序 二. 计数排序 一. 堆排序 堆排序&#xff08;Heapsort&#xff09;是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构&#xff0c;并同时满足堆积的性质&#xff1a;即子结点的键值或索引总是小于&#xff08;或者大于&#xff…

Yolov8在RK3588上进行自定义目标检测(二)

best.pt转best.onnx Yolov8在RK3588上进行自定义目标检测(一)已经进行了配置文件修改。接下来可以直接进行模型的转换。 下面是两种转换方法&#xff1a; 1.命令行 yolo export modelbest.pt formatrknn 2.转换脚本 convert_to_onnx.py from ultralytics import YOLOmode…