C#关于byte的操作说明

这篇具有很好参考价值的文章主要介绍了C#关于byte的操作说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

获取byte中每一位的值

byte byData = 0x36;

int n0, n1, n2, n3, n4, n5, n6, n7;
n0 = (byData & 0x01) == 0x01 ? 1 : 0;
n1 = (byData & 0x02) == 0x02 ? 1 : 0;
n2 = (byData & 0x04) == 0x04 ? 1 : 0;
n3 = (byData & 0x08) == 0x08 ? 1 : 0;
n4 = (byData & 0x10) == 0x10 ? 1 : 0;
n5 = (byData & 0x20) == 0x20 ? 1 : 0;
n6 = (byData & 0x40) == 0x40 ? 1 : 0;
n7 = (byData & 0x80) == 0x80 ? 1 : 0;

获取int16中其中某几位的数值

bit 内容  
11-15 预留  
10 值7  
6-9 值6  
5 值5  
4 值4  
3 值3  
2 值2  
0-1 值1  

/// <param name="val"></param> public virtual void SetValue(UInt16 val) { Fac = (Enmus.FactoryDebugStatus)(val & 0x03); Fligh = (Enmus.FlyLock)((val & 0x04)); Remoti = (Enmus.RemotingLock)(val & 0x08); Air = (Enmus.AirCtrl)((val & 0x10)); Alt = (Enmus.AltHold)((val & 0x20)); Vertl = (Enmus.VerticalCtrl)(((val >> 6) & 0x0F)); Engin= (Enmus.Start_StopState)((val & 0x400)); }

      

public UInt16 ToByte()
{
UInt16 ret = 0x00;
ret = (UInt16)(ret | ((UInt16)Waypoint << 9));
ret = (UInt16)(ret | ((UInt16)Side << 8));
ret = (UInt16)(ret | ((UInt16)Head << 7));
ret = (UInt16)(ret | ((UInt16)ToHeight << 6));
ret = (UInt16)(ret | ((UInt16)Height << 5));
ret = (UInt16)(ret | ((UInt16)LostContact << 3));
ret = (UInt16)(ret | ((UInt16)TaskDevice << 2));
ret = (UInt16)(ret | ((UInt16)Line));
return ret;
}

 

 结构体和byte数组互相转换

        /// <summary>
        /// 结构体转byte数组
        /// </summary>
        /// <param name="structObj"></param>
        /// <returns></returns>
        public static byte[] StructToBytes<T>(T structObj) where T : struct
        {
            //得到结构体的大小
            int size = Marshal.SizeOf(structObj);
            //创建byte数组
            byte[] bytes = new byte[size];
            //分配结构体大小的内存空间
            IntPtr structPtr = Marshal.AllocHGlobal(size);
            //将结构体拷到分配好的内存空间
            Marshal.StructureToPtr(structObj, structPtr, false);
            //从内存空间拷到byte数组
            Marshal.Copy(structPtr, bytes, 0, size);
            //释放内存空间
            Marshal.FreeHGlobal(structPtr);
            //返回byte数组
            return bytes;
        }

        /// <summary>
        /// byte数组转结构体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public static T BytesToStuct<T>(byte[] bytes) where T : struct
        { 
            //得到结构体的大小
            Type type = typeof(T);
            int size = Marshal.SizeOf(type);
            //byte数组长度小于结构体的大小
            if (size > bytes.Length)
            {
                //返回空
                return default(T);
            }
            //分配结构体大小的内存空间
            IntPtr structPtr = Marshal.AllocHGlobal(size);
            //将byte数组拷到分配好的内存空间
            Marshal.Copy(bytes, 0, structPtr, size);
            //将内存空间转换为目标结构体
            var obj = Marshal.PtrToStructure(structPtr, type);
            //释放内存空间
            Marshal.FreeHGlobal(structPtr);
            if (obj is T t)
            {
                return t;
            }
            return default(T);
        }

 文章来源地址https://www.toymoban.com/news/detail-697953.html

设置byte每一位的值

        /// <summary>
        /// 设置该字节的某一位的值(将该位设置成0或1)
        /// </summary>
        /// <param name="data">要设置的字节byte</param>
        /// <param name="index">要设置的位, 值从低到高为 1-8</param>
        /// <param name="flag">要设置的值 true(1) / false(0)</param>
        /// <returns></returns>
        public static byte SetbitValue(byte data, int index, bool flag)
        {
            if (index > 8 || index < 1)
                throw new ArgumentOutOfRangeException();
            int v = index < 2 ? index : (2 << (index - 2));
            return flag ? (byte)(data | v) : (byte)(data & ~v);
        }

获取byte中其中某一位的值

        /// <summary>
        /// 获取字节中的指定Bit的值
        /// </summary>
        /// <param name="this">字节</param>
        /// <param name="index">Bit的索引值(0-7)</param>
        /// <returns></returns>
        public static int GetBit(byte data, short index)
        {
            byte x = 1;
            switch (index)
            {
                case 0: { x = 0x01; } break;
                case 1: { x = 0x02; } break;
                case 2: { x = 0x04; } break;
                case 3: { x = 0x08; } break;
                case 4: { x = 0x10; } break;
                case 5: { x = 0x20; } break;
                case 6: { x = 0x40; } break;
                case 7: { x = 0x80; } break;
                default: { return 0; }
            }
            return (data & x) == x ? 1 : 0;
        }

 

 

到了这里,关于C#关于byte的操作说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QGIS 3D功能操作说明

    QGIS 可以轻松快速地创建 3D 地图和可视化。 可用于3d数据效果浏览及与2D数据的对比及数据的打印输出。具体功能如下。 1.在 QGIS 中,您可以通过几个简单的步骤创建 3D 模型。      (1)在QGIS中添加3D 数据的数据层,例如DEM,以供3D功能使用。               (2) 打开

    2024年02月17日
    浏览(49)
  • Git —— submodule 操作说明

    这里存在一个较大的坑,默认检出的子模块并不属于任何分支,而是一个 “detached head” ,虽然可以提交更改,但是并没有本地分支跟踪提交的更改,这意味着 下次更新子模块会丢失这些更改 。 因此在对子模块进行开发修改前,请先切换其所属分支和对应的 commit id。 由于

    2024年02月05日
    浏览(58)
  • RabbitMQ 管理界面操作说明

    当我们安装好RabbitMQ,并开启了 rabbitmq_management 插件并重启RabbitMQ服务后,我们就可以访问管控台了。 rabbitmq_management 开启后,重启RabbitMQ服务,然后浏览器访问 http://localhost:15672/ 账号:guest 密码:guest 登录进去后: 点击队列名,可以进行消息数量的查看: 消息内容查看: A

    2023年04月17日
    浏览(46)
  • ORACLE表空间说明及操作

    数据存储:表空间是数据库中存储数据的逻辑结构。它提供了用于存储表、索引、视图、存储过程等数据库对象的空间。通过划分数据和索引等对象的存储,可以更好地管理和组织数据库的物理存储结构。 性能管理和优化:通过将不同类型的数据存储在不同的表空间中,可以

    2024年02月08日
    浏览(46)
  • Apache-Pulsar安装操作说明

    Pulsar 是一种用于服务器到服务器消息传递的多租户高性能解决方案。 Pulsar 的主要特性如下: 对 Pulsar 实例中的多个集群的本机支持,并跨集群无缝地复制消息。 极低的发布和端到端延迟。 无缝可扩展至超过一百万个主题。 一个简单的客户端 API,具有Java、Go、Python和C++的绑

    2024年04月14日
    浏览(45)
  • 电脑入门:路由器 基本设置操作说明

    路由器  基本设置操作说明 首先我们我设置路由器,就需要先登录路由器, 那么怎样登路由器啊? 登录路由器的方法是   在ie的地址栏输入:http://192.168.1.1  输入完成以后直接回车  那么如果你输入正确 这个时候就应该听到有用户名的提示  呵呵 这是怎么回事啊?  不要召

    2024年02月11日
    浏览(45)
  • windows10 固定电脑IP地址操作说明

       本文主要介绍, windows10 操作系统下,不同的网络类型,对应的电脑IP地址设置方法。 在桌面右下角,点击网络图标,然后点击“网络和Internet设置”。 找到当前连接无线网的详细信息:选择“网络和共享中心”,点击“WLAN”进入WLAN状态界面,点击“详细信息”,保存

    2024年02月03日
    浏览(53)
  • SQL SEVER CDC 启动和关闭 操作说明

    变更数据捕获使用 SQL Server 代理记录表中发生的插入、更新及删除。 因此,它使得可以通过关系格式轻松使用这些数据更改。 将为修改的行捕获将这些更改数据应用到目标环境所需的列数据和基本元数据,并将其存储在镜像所跟踪源表的列结构的更改表中。 此外,表值函数

    2024年02月05日
    浏览(41)
  • Windows下MATLAB调用Python函数操作说明

    具体可参看MATLAB与Python版本的兼容 操作说明请参看下面两个链接: 操作指南 简单说明: 我安装的是MATLAB2022a和Python3.8.6(安装时请勾选所有可以勾选的,包括 路径 )。对应版本安装完成后,在MATLAB命令行中敲入执行路劲’D:SoftwareAppsPython3_7python.exe’(因人而异) 完了以

    2024年02月11日
    浏览(49)
  • BL0942电参数采集模块操作说明及疑问解答

    BL0942是一颗内置时钟免校准电能计量芯片,适用于单相多功能电能表、智能插座、智能家电等应用,具有较高的性价比。能够测量有效电压、有效电流、有功功率、有功电能量(用电量)参数。支持通过UART或者SPI输出数据,本文介绍的模块仅支持UART输出。BL0942模块需要外部

    2024年02月08日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包