//********************************************************************* /// <summary>解析した文字列を保存する /// </summary> /// /// <param name="recType"> レコード種別</param> /// <param name="data"> データ(空文字列の可能性もあり</param> //********************************************************************* private void storeValue(int start, int len, string recType, string data) { // データレコード以外は保存しない if (!recType.Equals("00")) { return; } //------------------------------------------------------- // このデータによって開始・終了アドレスが変わるかチェック //------------------------------------------------------- if (start < startAddr) { startAddr = start; } if (start + len > endAddr) { endAddr = start + len; } //------------------------------------------------------- // 追加すべきデータをセット //------------------------------------------------------- HexFileData hexFileData = new HexFileData(); hexFileData.Offset = start; hexFileData.Length = len; hexFileData.RecType = recType; hexFileData.Data = data; //------------------------------------------------------- // 一覧に追加 //------------------------------------------------------- hexFileList.Add(hexFileData); }
//********************************************************************* /// <summary> 指定されたアドレスの値を取得する /// </summary> /// <param name="address"> 取得対象アドレス</param> /// <returns> メモリ値</returns> //********************************************************************* public string getValue(int address) { // 指定されたアドレスに対する定義を探す HexFileData targetData = null; foreach (HexFileData curData in hexFileList) { if (curData.Offset <= address && curData.Offset + curData.Length > address) { targetData = curData; break; } } // 指定されたアドレスの定義がない場合は、デフォルト値を返す if (targetData == null) { int wordLen = DefaultValue.Length / 2; // 1ワードの長さを求める int wordPos = address % wordLen; // 要求されたアドレスが、ワード中のどこにあたるかかのoffsetを求める return(DefaultValue.Substring(wordPos * 2, 2)); } // 定義がある場合は、ファイルの内容を返す int pos = address - targetData.Offset; return(targetData.Data.Substring(pos * 2, 2)); }