Ejemplo 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);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 将给定的数据保存为HEX数据行
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="val"></param>
        /// <param name="num"></param>
        /// <returns></returns>
        public static string[] ToHexFileLine(long addr, byte[] val, int num)
        {
            List <string> _return = new List <string>();

            //判断每行的数据是否过大或者不能被16整除
            if ((num > 0xFF) || ((num % 16) != 0))
            {
                num = 16;
            }

            //---进行分行处理
            long lineCount = (val.Length / num);

            //---求整数处理
            if ((val.Length % num) != 0)
            {
                lineCount += 1;
            }

            //---数据保存处理
            for (long i = 0; i < lineCount; i++)
            {
                string temp = "";

                //---计算当前数据行的数据
                int byteCount = (int)(((val.Length - i * num) > num) ? num : (val.Length - i * num));

                //---当前行数据
                byte[] lineVal = new byte[byteCount];

                //---拷贝数据
                Array.Copy(val, i * num, lineVal, 0, lineVal.Length);

                //---计算地址
                long baseAddr = addr + i * num;

                //---数据空间64K检查
                if (((baseAddr % 65536) == 0) && (baseAddr != 0))
                {
                    //---对65536求整处理
                    long externLineAddr = (baseAddr / 65536);
                    temp = HexLine.ToHexLineExternLineAddrRecord(externLineAddr);
                    _return.Add(temp);
                    temp = string.Empty;
                }

                //---本次数组的内容为0xFF,则跳过
                if (HexFile.equal(lineVal))
                {
                    continue;
                }
                else
                {
                    //---保存数据记录文件
                    temp = HexLine.ToHexLineDataRecord((baseAddr & 0xFFFF), lineVal);
                    _return.Add(temp);
                }
            }
            return(_return.ToArray());
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 保存为HEX文件
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="val"></param>
        /// <param name="num"></param>
        /// <returns></returns>
        public static string ToSaveHexFile(long addr, byte[] val, int num)
        {
            string _return = "";

            //---获取数据行
            string[] temp = HexFile.ToHexFileLine(addr, val, num);
            if (temp == null)
            {
                return(null);
            }
            //---填充数据行
            int i = 0;

            for (i = 0; i < temp.Length; i++)
            {
                _return += temp[i];
            }
            //---保存为数据行
            _return += HexLine.ToHexLineEndOfFileRecord();
            return(_return);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// 保存为HEX文件
 /// </summary>
 /// <param name="val"></param>
 /// <returns></returns>
 public static string ToSaveHexFile(byte[] val)
 {
     return(HexFile.ToSaveHexFile(0, val, 16));
 }
Ejemplo n.º 5
0
 /// <summary>
 /// 保存为HEX文件
 /// </summary>
 /// <param name="val"></param>
 /// <param name="num"></param>
 /// <returns></returns>
 public static string ToSaveHexFile(byte[] val, int num)
 {
     return(HexFile.ToSaveHexFile(0, val, num));
 }
Ejemplo n.º 6
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);
        }