/// <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); }
/// <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); }