Exemplo n.º 1
0
        /// <summary>
        /// 字数据
        /// </summary>
        /// <param name="val"></param>
        /// <param name="isHighFirst"></param>
        /// <returns></returns>
        public int[] GetHexFile(bool isHighFirst = false)
        {
            //---获取当前数据
            byte[] bufferMap = GetHexFile(0xFF);
            //---创建缓存区
            int[] _return = new int[bufferMap.Length / 2];
            //---填充数组为指定的数据
            HexFile.memset(ref _return, _return.Length, 0xFFFF);
            //---将数据转换成Int数组
            int i = 0;

            for (i = 0; i < _return.Length; i++)
            {
                if (isHighFirst)
                {
                    //---高字节在前
                    _return[i] = bufferMap[2 * i + 1];
                    _return[i] = (_return[i] << 8) + bufferMap[2 * i];
                }
                else
                {
                    //---低字节在前
                    _return[i] = bufferMap[2 * i];
                    _return[i] = (_return[i] << 8) + bufferMap[2 * i + 1];
                }
            }

            return(_return);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 获取解析后的数据
        /// </summary>
        /// <param name="length"></param>
        /// <returns></returns>
        public byte[] GetHexFile(long length)
        {
            //---创建缓存区
            byte[] _return = new byte[length];
            if (_return == null)
            {
                return(null);
            }
            //---用指定的数据填充缓存区
            HexFile.memset(ref _return, length, 0xFF);
            //---初始化数据的地址
            long baseAddr = this.m_BeginAddr;
            //---将解析后的数据填充到数据缓存区
            int i = 0;

            for (i = 0; i < base.Count; i++)
            {
                byte[] buffer = null;
                //---数据类型的解析
                switch (base[i].m_HexType)
                {
                case HexType.DATA_RECORD:
                    //---拷贝数据
                    Array.Copy(base[i].m_HexByte, 0, _return, (baseAddr + base[i].m_Addr), base[i].m_Length);
                    break;

                case HexType.END_OF_FILE_RECORD:
                    break;

                case HexType.EXTEND_SEGMENT_ADDRESS_RECORD:
                    //---获取数据的地址
                    buffer = new byte[2] {
                        base[i].m_HexByte[1], base[i].m_HexByte[0]
                    };
                    baseAddr   = BitConverter.ToUInt16(buffer, 0);
                    baseAddr <<= 4;
                    break;

                case HexType.START_SEGMENT_ADDRESS_RECORD:
                    //---获取数据的地址
                    buffer = new byte[4] {
                        base[i].m_HexByte[3], base[i].m_HexByte[2], base[i].m_HexByte[1], base[i].m_HexByte[0]
                    };
                    baseAddr   = BitConverter.ToUInt32(buffer, 0);
                    baseAddr <<= 4;
                    break;

                case HexType.EXTEND_LINEAR_ADDRESS_RECORD:
                    //---获取数据的地址
                    buffer = new byte[2] {
                        base[i].m_HexByte[1], base[i].m_HexByte[0]
                    };
                    baseAddr   = BitConverter.ToUInt16(buffer, 0);
                    baseAddr <<= 16;
                    break;

                case HexType.START_LINEAR_ADDRESS_RECORD:
                    //---获取数据的地址
                    buffer = new byte[4] {
                        base[i].m_HexByte[3], base[i].m_HexByte[2], base[i].m_HexByte[1], base[i].m_HexByte[0]
                    };
                    baseAddr = BitConverter.ToUInt32(buffer, 0);
                    break;

                default:
                    return(null);
                }
            }
            return(_return);
        }