获取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); }
设置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; }
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容