public override string ToText(IDataModel rawData, int offset, bool deep) { var result = new StringBuilder("-"); var options = rawData.GetBitOptions(SourceArrayName); for (int i = 0; i < Length; i++) { var bits = rawData[offset + i]; if (options == null) { result.Append(bits.ToString("X2")); } else { var optionOffset = i << 3; for (int j = 0; j < 8; j++) { if ((bits & (1 << j)) == 0) { continue; } result.Append(" "); result.Append(options[optionOffset + j]); } } } result.Append(" "); if (options != null) { result.Append("/"); } return(result.ToString()); }
public override string ToText(IDataModel rawData, int offset, bool deep) { var result = new StringBuilder("-"); var options = rawData.GetBitOptions(SourceArrayName); // handle edge cases: no options, or no options for some set bits var highestByteSet = Length - 1; while (rawData[offset + highestByteSet] == 0 && highestByteSet > 0) { highestByteSet -= 1; } var highestBitSet = (int)Math.Log(rawData[offset + highestByteSet], 2); var unknownBitsAreSet = options == null || (highestByteSet * 8) + highestBitSet >= options.Count; for (int i = 0; i < Length; i++) { var bits = rawData[offset + i]; if (unknownBitsAreSet) { result.Append(bits.ToString("X2")); } else { var optionOffset = i << 3; for (int j = 0; j < 8; j++) { if ((bits & (1 << j)) == 0) { continue; } result.Append(" "); result.Append(options[optionOffset + j]); } } } result.Append(" "); if (options != null) { result.Append("/"); } return(result.ToString()); }