public CardDriverActivity(byte[] value, int activityStructureLength) { activityDailyRecords = new List <CardActivityDailyRecord>(); activityPointerOldestDayRecord = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(value, 0, 2)); // = first CardActivityDailyRecord activityPointerNewestRecord = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(value, 2, 2)); // = last CardActivityDailyRecord byte[] records = new byte[activityStructureLength]; int lengthToEnd = records.Length - activityPointerOldestDayRecord; Array.Copy(value, 4 + activityPointerOldestDayRecord, records, 0, lengthToEnd); if (activityPointerOldestDayRecord != 0) { Array.Copy(value, 4, records, lengthToEnd, activityPointerOldestDayRecord); } int activityPointerLastRecordOffset; if (activityPointerNewestRecord >= activityPointerOldestDayRecord) { activityPointerLastRecordOffset = activityPointerNewestRecord - activityPointerOldestDayRecord; } else { activityPointerLastRecordOffset = records.Length - activityPointerOldestDayRecord + activityPointerNewestRecord; } int cardActivityDailyRecordsOffset = 0; int cadrActivityPreviousRecordLength = 0; int cadrActivityRecordLength = 0; int cadrIntegrityCheckActivityPreviousRecordLength = 0; while (cardActivityDailyRecordsOffset <= activityPointerLastRecordOffset) { int cadrLength = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(records, cardActivityDailyRecordsOffset + 2, 2)); if (cadrLength == 0) { break; } CardActivityDailyRecord cadr = new CardActivityDailyRecord(ConvertionClass.arrayCopy(records, cardActivityDailyRecordsOffset, cadrLength)); cadrActivityPreviousRecordLength = cadr.activityPreviousRecordLength.cardActivityLengthRange; cadrActivityRecordLength = cadr.activityRecordLength.cardActivityLengthRange; cardActivityDailyRecordsOffset += cadrActivityRecordLength; // next CardActivityDailyRecord cadrIntegrityCheckActivityPreviousRecordLength = cadrActivityRecordLength; // save record length for integrity check activityDailyRecords.Add(cadr); } structureSize = 2 + 2 + cardActivityDailyRecordsOffset; }
public CardDriverActivity(byte[] value, int activityStructureLength) { activityDailyRecords = new List<CardActivityDailyRecord>(); activityPointerOldestDayRecord = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(value, 0, 2)); // = first CardActivityDailyRecord activityPointerNewestRecord = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(value, 2, 2)); // = last CardActivityDailyRecord byte[] records = new byte[activityStructureLength]; int lengthToEnd = records.Length - activityPointerOldestDayRecord; Array.Copy(value, 4 + activityPointerOldestDayRecord, records, 0, lengthToEnd); if (activityPointerOldestDayRecord != 0) { Array.Copy(value, 4, records, lengthToEnd, activityPointerOldestDayRecord); } int activityPointerLastRecordOffset; if (activityPointerNewestRecord >= activityPointerOldestDayRecord) { activityPointerLastRecordOffset = activityPointerNewestRecord - activityPointerOldestDayRecord; } else { activityPointerLastRecordOffset = records.Length - activityPointerOldestDayRecord + activityPointerNewestRecord; } int cardActivityDailyRecordsOffset = 0; int cadrActivityPreviousRecordLength = 0; int cadrActivityRecordLength = 0; int cadrIntegrityCheckActivityPreviousRecordLength = 0; while (cardActivityDailyRecordsOffset <= activityPointerLastRecordOffset) { int cadrLength = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(records, cardActivityDailyRecordsOffset + 2, 2)); if (cadrLength == 0) { break; } CardActivityDailyRecord cadr = new CardActivityDailyRecord(ConvertionClass.arrayCopy(records, cardActivityDailyRecordsOffset, cadrLength)); cadrActivityPreviousRecordLength = cadr.activityPreviousRecordLength.cardActivityLengthRange; cadrActivityRecordLength = cadr.activityRecordLength.cardActivityLengthRange; cardActivityDailyRecordsOffset += cadrActivityRecordLength; // next CardActivityDailyRecord cadrIntegrityCheckActivityPreviousRecordLength = cadrActivityRecordLength; // save record length for integrity check activityDailyRecords.Add(cadr); } structureSize = 2 + 2 + cardActivityDailyRecordsOffset; }