UNION嵌套STRUCT的两种类型

devtools/2024/9/20 1:16:48/ 标签: c语言, 开发语言, c++, windows

1. STRUCT里面的总长度大于UNION中的最大长度

        在UNION类型中,嵌套如STRUCT类型,其中STRUCT的类型还比UNION类型中最大的类型的长度还长的时候,会如何处理呢,看下面示例

程序源码

#include "stdafx.h"typedef unsigned long ULONG;
typedef unsigned char UCHAR;
typedef void *HANDLE;typedef struct
{ULONG f_data1;UCHAR f_data2;union{ULONG s_data1;UCHAR s_data2;struct{ULONG           s_Value1;			ULONG           s_Value2;		}data_second;}u;
}DATA_FIRST;int _tmain(int argc, _TCHAR* argv[])
{DATA_FIRST  d1;d1.f_data1 = 0x11111111;d1.f_data2 = 0x23;d1.u.s_data1 = 0x44444444;d1.u.s_data2 = 0x56;d1.u.data_second.s_Value1 = 0x789a;d1.u.data_second.s_Value2 = 0x88888888;printf("Print data: \n");printf("\t	d1.f_data1 = 0x%X \n", d1.f_data1);printf("\t	d1.f_data2 = 0x%X \n", d1.f_data2);printf("\t	d1.u.s_data1 = 0x%X \n", d1.u.s_data1);printf("\t	d1.u.s_data2 = 0x%X \n", d1.u.s_data2);printf("\t	d1.u.data_second.s_Value1 = 0x%X \n", d1.u.data_second.s_Value1);printf("\t	d1.u.data_second.s_Value2 = 0x%X \n", d1.u.data_second.s_Value2);return 0;
}

运行结果

源码分析

2. TRUCT里面的总长度小于等于UNION中的最大长度

        在UNION类型中,嵌套如STRUCT类型,其中STRUCT的类型比UNION类型中最大的类型的长度还小时候,会如何处理呢,看下面示例

程序源码


#include "stdafx.h"typedef unsigned long ULONG;
typedef unsigned char UCHAR;
typedef void *HANDLE;typedef struct
{ULONG data1;union{ULONG data2;UCHAR data3;struct{ULONG           value1: 4;ULONG           value2 : 4;ULONG           value3 : 4;ULONG           value4 : 4;ULONG           value5 : 4;ULONG           value6 : 4;ULONG           value7 : 4;ULONG           value8 : 4;}value;}u;
}DATA_FIRST;int _tmain(int argc, _TCHAR* argv[])
{DATA_FIRST  d;d.data1 = 0x11112222;d.u.data2 = 0x22334455;d.u.data3 = 0xaa;d.u.value.value5 = 0xb;printf("Print data: \n");printf("\t	d.data1 = 0x%X \n", d.data1);printf("\t	d.u.data2 = 0x%X \n", d.u.data2);printf("\t	d.u.data3 = 0x%X \n", d.u.data3);printf("\t	d.u.value.value1 = 0x%X \n", d.u.value.value1);printf("\t	d.u.value.value2 = 0x%X \n", d.u.value.value2);printf("\t	d.u.value.value3 = 0x%X \n", d.u.value.value3);printf("\t	d.u.value.value4 = 0x%X \n", d.u.value.value4);printf("\t	d.u.value.value5 = 0x%X \n", d.u.value.value5);printf("\t	d.u.value.value6 = 0x%X \n", d.u.value.value6);printf("\t	d.u.value.value7 = 0x%X \n", d.u.value.value7);printf("\t	d.u.value.value8 = 0x%X \n", d.u.value.value8);return 0;
}

运行结果:

源码分析:


http://www.ppmy.cn/devtools/111715.html

相关文章

HarmonyOS开发5.0【应用程序包】

对比HarmonyOS 与 Android 的应用程序包 HarmonyOS 的应用程序包与 Android 的应用程序包在多个方面存在一些不同之处,主要体现的方面: 包格式(从包的后缀名可以看出来) HarmonyOS: 使用 .hap 格式作为应用程序包。这个格式是 …

linux限制普通用户只能上传文件不能下载和传文件到到其他服务器

1、实施方案 因为用户在linux系统默认主要是通过sftp、scp和lrzsz命令实现文件上传和下载,可以通过以下几点来防制普通用户的上传和下载文件,相关设置必须使用root用户进行操作。 禁用普通用户使用scp命令,可以防止普通用户使用winscp软件下…

利用 Zero-1-2-3 进行多视图 3D 重建:从单图像到多视图 3D 模型的生成

3D 模型生成在计算机视觉领域有着广泛的应用,从虚拟现实到自动驾驶,基于单张图像的 3D 重建技术正在迅速发展。这篇博客将带你深入探索如何使用 Zero-1-2-3 框架进行多视图 3D 重建,通过详细解析该框架中的代码结构和功能,帮助你理…

WTL580-电子锁微波雷达应用解决方案,5.8GHz精准人体感知,触发高效交互新体验

一、简介 随着智能电子门锁普及,电子门锁的市场也随着打开,安装智能化电子门锁也为大势所趋。现我司推出基于WTL580微波雷达的电子锁应用方案,通过检测门锁周围是有活动人体存在来激活门锁。我司WTL580微波雷达方案采用5.8GHz微米波雷达传感器…

C语言-第十章:预处理

传送门:C语言-综合案例:通讯录 目录 第一节:什么是预处理 第二节:#define 2-1.定义符号 2-2.给类型取别名 2-3.定义一段代码 2-4.定义宏 2-5.#define 的替换规则 2-6.宏中的# 2-7.宏中的## 2-8.#undef 移除一个宏定义 第三节&a…

武汉传媒学院联合创龙教仪建设DSP教学实验箱,基于DSP C6000平台搭建

1、院校简介 武汉传媒学院是中南地区唯一一所传媒类本科高校,也是湖北省“转型发展”首批试点高校 前身是2004年成立的华中师范大学武汉影视工程学院,2007年经教育部批准更名为华中师范大学武汉传媒学院,2016年,经教育部批准&…

漫谈设计模式 [10]:享元模式

引导性开场 菜鸟:老鸟,我最近在做一个游戏开发项目,发现内存占用特别大,尤其是一些重复对象,非常浪费资源。你有什么建议吗? 老鸟:这个问题很常见。你听说过设计模式中的“享元模式”吗&#…

HarmonyOS开发实战( Beta5.0)滑动视频自动播放案例实践

鸿蒙HarmonyOS开发往期文章必看: HarmonyOS NEXT应用开发性能实践总结 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) 介绍 本示例主要介绍视频列表滑动到屏幕中间自动播放场景&…

电巢科技携Ecosmos元宇宙产品亮相第25届中国光博会

第25届中国国际光电博览会(“CIOE中国光博会”)今日在深圳国际会展中心盛大开幕。本届博览会以“光电引领未来,驱动应用创新”为主题,吸引了全球超过3700家优质光电企业参展,展示了光电产业的最新成果和前沿技术。 电…

Excel 基础知识-操作手册2

十、查找与引用函数 Excel中的查找与引用函数非常丰富,以下是一些主要的函数及其使用示例: 1. **VLOOKUP** - 语法:VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]) - 示例:假设A列是员工编号,B…

YOLOv5植物识别系统

YOLOv5植物识别系统 项目描述 本项目旨在开发一个基于YOLOv5的植物识别系统,该系统能够通过图像识别技术自动检测和分类植物。项目使用YOLOv5作为核心检测模型,并结合Python编程语言,构建了一个高效、准确的植物识别工具。该系统不仅可以用于…

漫谈设计模式 [20]:解释器模式

引导性开场 菜鸟:老鸟,我最近在处理一个项目,需要解析和执行一些简单的脚本语言。但是,我实现的代码变得非常复杂和难以维护。你有过类似的经验吗? 老鸟:当然有,解析和执行脚本语言确实会让代…

2024网络安全人才实战能力白皮书安全测试评估篇

9月10日,国内首个聚焦“安全测试评估”的白皮书——《网络安全人才实战能力白皮书-安全测试评估篇》(以下简称“白皮书”)在国家网络安全宣传周正式发布。 作为《网络安全人才实战能力白皮书》的第三篇章,本次白皮书聚焦“安全测…

JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)

前言 我们想要部署一个javaWeb项目到tomcat上,需要了解一些概念 什么是tomcat? Tomcat 是 Apache 软件基金会(Apache Software Foundation)下的一个开源项目,主要用于实现 Java Servlet、JavaServer Pages(…

3D Gaussian Splatting 论文学习

概述 目前比较常见的渲染方法大致可以分为2种: 将场景中的物体投影到渲染平面:传统的渲染管线就是这种方式,主要针对Mesh数据,可以将顶点直接投影成2D的形式,配合光栅化、深度测试、Alpha混合等就可以得到渲染的图像…

OPENAIGC开发者大赛企业组AI黑马奖 | AIGC数智传媒解决方案

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给您…

极狐GitLab DevSecOps 功能合集(七大安全功能)

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

浅谈WebApi

一、基本介绍 Web API(Web应用程序编程接口)是一种用于构建应用程序的接口,它允许软件应用程序通过HTTP请求与Web服务器进行交互。Web API通常用于构建客户端-服务器应用程序,其中客户端可以是Web浏览器、移动应用程序、桌面应用程…

docker 进程的概念

Docker 是一个开放源代码软件,用于开发、运输和运行应用程序,它通过将应用程序及其依赖项打包到一个轻量级、可移植的容器中,从而实现了应用程序的隔离和一致性。在 Docker 的上下文中,进程(Process)是一个…

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static NonNull File getRootDirectory() {return DIR_ANDROID_ROOT;}// ENV_ANDROID_ROOT 的值为 "AN…