首页 > 其他分享 >union共用体

union共用体

时间:2023-09-07 16:44:10浏览次数:40  
标签:EEP Status union u1 uint8 u2 printf 共用

一、总结

1.共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。
在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。
2.当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中类型字节数最多的变量的类型长度的整数倍。

typedef union{/*“共用”类型“FOO”*/
    char s[10];    /*“字符”类型的数组“S”下面有“10”个元素*/
    int i;        /*“整数”类型i*/
}foo;

foo中字节最多是类型是int ,sizeof(int)=4 ,整数倍 4*3=12 >char s[10] 的10;所以 sizeof(foo)=12

二、代码举例

#include <stdio.h>
#include <stdint.h>
#include <unistd.h>

typedef union{
 char a;
 int  b;
 int  c;
}data_union;

typedef union{/*“共用”类型“FOO”*/
    char s[10];    /*“字符”类型的数组“S”下面有“10”个元素*/
    int i;        /*“整数”类型i*/
}foo;

int main()
{
    data_union u1;
    u1.a = 'H';
    u1.b = 10;
    u1.c = 20;

    data_union u2;
    u2.b = 10;
    u2.c = 20;
    u2.a = 'H';//H 72

    printf("u1 size:%d\n",sizeof(u1));//u1 size:4
    printf("foo size:%d\n",sizeof(foo));//foo size:12
    printf("u1.a:%d u1.b:%d u1.c:%d\n",u1.a,u1.b,u1.c);//u1.a:20 u1.b:20 u1.c:20
    printf("u2.a:%d u2.b:%d u2.c:%d\n",u2.a,u2.b,u2.c);//u2.a:72 u2.b:72 u2.c:72
    return 0;
}

2.通风柜项目中类似的代码

#include <stdio.h>
#include <stdint.h>
#include <unistd.h>

#if !defined(__PACKED)
    #define __PACKED
#endif

typedef union
{
    uint16_t Val;
    uint8_t v[2] __PACKED;
    struct __PACKED
    {
        uint8_t LB;
        uint8_t HB;
    } byte;
    struct __PACKED
    {
        uint8_t b0:1;
        uint8_t b1:1;
        uint8_t b2:1;
        uint8_t b3:1;
        uint8_t b4:1;
        uint8_t b5:1;
        uint8_t b6:1;
        uint8_t b7:1;
        uint8_t b8:1;
        uint8_t b9:1;
        uint8_t b10:1;
        uint8_t b11:1;
        uint8_t b12:1;
        uint8_t b13:1;
        uint8_t b14:1;
        uint8_t b15:1;
    } bits;
} WORD_VAL, WORD_BITS;

int main()
{    


    WORD_VAL EEP_Status;
    EEP_Status.v[0] = 0x34;
    EEP_Status.v[1] = 0x12;

    printf("EEP_Status:%d\n",EEP_Status.Val);//4660  0x1234
    printf("EEP_Status:%d\n",EEP_Status.bits.b2);//1
    printf("EEP_Status:%d\n",EEP_Status.bits.b3);//0
    printf("EEP_Status:%d\n",EEP_Status.bits.b4);//1


    WORD_VAL EEP_Status2;
    EEP_Status2.Val=0x1234;

    printf("EEP_Status2:%d\n",EEP_Status2.v[0]);//52  0x34
    printf("EEP_Status2:%d\n",EEP_Status2.v[1]);//18  0x12

    return 0;
}


标签:EEP,Status,union,u1,uint8,u2,printf,共用
From: https://www.cnblogs.com/ike_li/p/17685362.html

相关文章

  • 软件测试|SQL中的UNION和UNION ALL详解
    简介在SQL(结构化查询语言)中,UNION和UNIONALL是用于合并查询结果集的两个关键字。它们在数据库查询中非常常用,但它们之间有一些重要的区别。在本文中,我们将深入探讨UNION和UNIONALL的含义、用法以及它们之间的区别。UNION操作UNION用于合并两个或多个查询的结果集,并返回一个唯一的......
  • 共用体详解
    共用体同结构体的定义形式上相同,只是把关键字struct改为union。有时需要把几种不同类型的变量放在同有一内存区域中,见图12-6,把一个整型变量,一个字符变量,一个实型变量放在同一内存区域中,尽管三个变量占用字节数各不相同,但起始地址都一样(例如1000)它要用“覆盖’’技术,使多个变量互相......
  • 结构体Struct、联合体Union与类Class
    结构体Struct、联合体Union与类Class1.Struct/Classstruct能包含成员函数吗?能!struct能继承吗?能!!struct能实现多态吗?能!!!1.1最本质的区别是默认的访问控制;结构体的继承是public的,class的继承是private的;两者也可以交叉继承,继承权限由子类决定,如结构体B继承类A,则为public继......
  • oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户
    oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户news2023/8/1413:13:55概述有朋友问到如何查出表空间都被哪些用户使用的一些方法,因为有几种情况需要考虑,也顺便做个总结。需求:如何查看共用一个表空间的所有用户查看某表空间下表的所有者使用dba用户......
  • burpsuite靶场----SQL注入3----oracle的union注出版本
    burpsuite靶场----SQL注入3----oracle注入推荐burpsuite插件https://github.com/smxiazi/xia_sqllinux上安装oraclemysql的详细学习可以下载小皮面板或者手动安装oracle这里使用docker安装,因为oracle手动安装比较麻烦这里我参照这位师傅的博客在linux上搭建oracle数据库ht......
  • union注入
    数据库information_schema 包含所有mysql数据库的简要信息↓ 其中包含有两个所需数据表 tables  columns表名集合表列名集合表 查找数据库security中的表名第一步确定基本查询语句字符型(闭合符号)/数字型查询语句列数group......
  • SAP CDS view 里 UNION 操作的用法
    下图是SAPCDSviewUnion操作的语法和例子:SAPCDS(CoreDataServices)视图是SAPHANA数据库在ABAP层面上的抽象和逻辑视图。它不仅提供了一种SQL类型的语言(DataControlLanguage,DCL)来查询和操作数据,还提供了各种特性和功能以支持应用程序开发。在SAPCDS中,Union操......
  • 设计openid和unionid
    openid和unionid用户信息id表1,表2应用信息a公众号1b小程序c网站dapp表3应用公众号appopenid=md5(用户信息+单个应用信息--公众号/或小程序id)unid=md5(表2开放号id+用户信息)网站微信用户【集团用户】(唯一的)----||---->开放号-->返回openid和unio......
  • C# 仿写 共用体
       [StructLayout(LayoutKind.Explicit,CharSet=CharSet.Ansi,Pack=1)]   publicstructstrUion   {       [FieldOffset(0)]       publicushortcrc16;       [FieldOffset(0)]       publicbytecrc16L;       [......
  • 关于union和合并单元格的区别
    选择与单元格A1中的值相等的所有单元格SubselectSameCells()DimgoalRangeAsRange,indexCellAsRangeSetgoalRange=Range("A1")ForEachindexCellInRange("A1:B5")IfindexCell.Value=Range("A1").ValueThen......