C# 位域 (Bit fields in C#)

本文介绍了在C#中如何进行位域操作,特别是在与硬件通信时处理位操作问题的方法。通过创建结构体并利用字段大小来实现位操作,如示例所示,可以有效地处理1字节和4字节的数据位。
摘要由CSDN通过智能技术生成

问题

和硬件通信时会遇到位操作的问题,比如举例。在C#中我们可以做类似的处理。

实现

按照这种方法即可实现对位操作。具体如下:

public struct MyStruct
        {
   
            internal byte raw;

            const byte sz0 = 2, loc0 = 0, mask0 = ((1 << sz0) - 1) << loc0;
            const byte sz1 = 2, loc1 = loc0 + sz0, mask1 = ((1 << sz1) - 1) << loc1;

            const byte sz2 = 1, loc2 = loc1 + sz1, mask2 = ((1 << sz2) - 1) << loc2;
            const byte sz3 = 1, loc3 = loc2 + sz2, mask3 = ((1 << sz3) - 1) << loc3;

            const byte sz4 = 1, loc4 = loc3 + sz2, mask4 = ((1 << sz4) - 1) << loc4;
            const byte sz5 = 1, loc5 = loc4 + sz2, mask5 = ((1 << sz5) - 1) << loc5;

            //const int sz6 = 4, loc6 = loc5 + sz2, mask6 = ((1 << sz6) - 1) << loc6;
            //const int sz7 = 4, loc7 = loc6 + sz2, mask7 = ((1 << sz7) - 1) << loc7;

            public byte Item0
            {
   
                get {
    return (byte)((raw & mask0) >> loc0); }
                set {
    raw = (byte)(raw & ~mask0 | (value << loc0) & mask0); }
            }

           
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值