打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++中联合体union套结构体struct转换为C#结构体

结构体定义c++和c#基本差不多 只是C#没有Union,下面是C++结构体定义

struct{
    unsigned int ia;
    char iac[4];
    short ias[4];
}A;
struct{
    unsigned int ib;
    char iac[4];
    short ias[4];
}B;
struct{
    int index[3]
}C;
struct{
    unsigned int id;
}D;
//C++联合体Union

union{
    A a;
    B b;
    C c;
    D d
}U;

或写成如下C++联合体Union定义

union{
    struct{
    unsigned int ia;
    char iac[4];
    short ias[4];
    }A;

    struct{
    unsigned int ib;
    char iac[4];
    short ias[4];
    }B;

    struct{
    int index[3]
    }C;

    struct{
    unsigned int id;
    }D;

}U;

C#中没有联合体Union,可以通过手动控制结构体每个元素的位置来实现,这需要结合使用StructLayoutAttribute、LayoutKind以及FieldOffsetAttribute。使用时必须引用System.Runtime.InteropServices,下面用C#模拟C++中U的联合

using System;

using System.Collections.Generic;

using System.IO;

using System.Text

using System.Runtime.InteropServices

namespace union

{

        public unsafe struct A

        {

            public ushort ia;

            public fixed char iac[4];

            public fixed short ias[4];

        }

        public unsafe struct B

        {

            public uint ib;

            public fixed char iac[4];

            public fixed short ias[4];

        }

        public unsafe struct C

        {

            public fixed int ix[3];

        }

        public struct D

        {

            public uint id;

        }

        //定义结构属性,结构类型为精确定位,大小12字节

        [StructLayout(LayoutKind.Explicit, Size = 12)]

        public struct U {    

        [FieldOffset(0)]//结构A定位在偏移0的位置

        public A a;

        [FieldOffset(0)]//结构B定位在偏移0的位置

        public B b;

        [FieldOffset(0)]//结构C定位在偏移0的位置

        public C c;

        [FieldOffset(0)]//结构D定位在偏移0的位置

        public D d;

    }

}

也可以不定义U的Size,这时结构体U的Size为U内结构最大

,默认情况下,C# 不支持指针算法。 不过,通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文。不安全代码不一定是危险的,只是其安全性无法由 CLR 进行验证的代码。在某些情况下,通过移除数组界限检查,不安全代码可提高应用程序的性能。

  • 在 C# 中,为了编译不安全代码,必须用 /unsafe 编译应用程序。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
结构体、联合体嵌套使用的实用操作!
struct/union/enum的区别
结构struct 联合Union和枚举Enum的细节讨论
结构体struct和联合体union最全讲解
C语言丨关键字union的定义和使用
学C51的基础10 联合(union) 和结构(struct) 》
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服