• byte数据与Int和bit转换类


    /// 
        /// byte数据和int、bit转换类
        /// 
        public class ByteUtil
        {
            /// 
            /// 从int中取出某一位的byte值
            /// 
            /// 原int数据
            /// 取值位置[0-4]
            /// position所在位的byte数值
            public byte getByteFromInt(int source,int position) {
                if (position < 0 || position > 3) throw new ArgumentOutOfRangeException("position范围值超限");
    
                byte result = (byte)((source >> position * 8) & 0xFF);
                return result;
            }
    
            /// 
            /// 将byte数组转换成int数值
            /// 
            /// 要转换的byte数组
            /// int数值
            public int getIntFromBytes(byte[] source) {
                byte[] rSource = new byte[4];
                if (source.Length > 4) throw new ArgumentOutOfRangeException("byte数组范围超限");
                for (int i = 0; i < source.Length; i++) {
                    rSource[i] = source[i];
                }
                int result = source[3] << 24 | source[2] << 16 | source[1] << 8 | source[0];
                return result;
            }
    
            /// 
            /// 从byte数据中获取某一位bit值
            /// 
            /// 原始byte数据
            /// 取值位置[0-7]
            /// byte数据在position位置的bit值
            public int getBitFromByte(byte sourceData,int position) {
                int offset = 0x00;
                switch (position) { 
                    case 0:
                        offset = 0x01;
                        break;
                    case 1:
                        offset = 0x02;
                        break;
                    case 2:
                        offset = 0x04;
                        break;
                    case 3:
                        offset = 0x08;
                        break;
                    case 4:
                        offset = 0x10;
                        break;
                    case 5:
                        offset = 0x20;
                        break;
                    case 6:
                        offset = 0x40;
                        break;
                    case 7:
                        offset = 0x80;
                        break;
                    default:
                        throw new ArgumentOutOfRangeException("position范围值超限");
                }
                int result = ((byte)(sourceData & offset) == 0) ? 0 : 1;
                return result;
            }
    
            /// 
            /// 设置byte数据中某一位bit值
            /// 
            /// 原始byte数据
            /// bit赋值的位置
            /// 赋值数据0或1:true代表赋值为1,false代表赋值为0
            /// 赋值之后的byte数据
            public byte setBitToByte(byte sourceData,int position, bool flag) {
                int offset = 0x00;
                switch (position)
                {
                    case 0:
                        offset = 0x01;
                        break;
                    case 1:
                        offset = 0x02;
                        break;
                    case 2:
                        offset = 0x04;
                        break;
                    case 3:
                        offset = 0x08;
                        break;
                    case 4:
                        offset = 0x10;
                        break;
                    case 5:
                        offset = 0x20;
                        break;
                    case 6:
                        offset = 0x40;
                        break;
                    case 7:
                        offset = 0x80;
                        break;
                    default:
                        throw new ArgumentOutOfRangeException("position范围值超限");
                }
                byte result = flag?(byte)(sourceData | offset):(byte)(sourceData & ~offset);
                return result;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
  • 相关阅读:
    三、流程控制及循环《2022 solidity8.+ 版本教程到实战》
    数据结构与算法之顺序表经典题目《合并两个有序数组》《合并两个有序链表》
    react-native实践日记--5.ReactNative 项目版本升级,0.61到0.72升级的问题记录(一)
    3、RGB和通道(channel)
    半导体高加速应力测试及标准
    谁能拒绝一个会动的皮卡丘挂件
    ModelAndView类简介说明
    计算机网络 - IPv4 常考知识点详解(超详细!)
    sqlserver连接
    GDPU 商务英语 [初入职场](持续更新……)
  • 原文地址:https://blog.csdn.net/zcn596785154/article/details/133791013