private static void UpdateArrayType(byte[] array, SAMOptionalField field)
{
byte[] temparray = new byte[4];
char arraytype = field.Value[0];
int arrayTypeSize = GetSizeOfArrayType(arraytype);
string[] elements = field.Value.Split(DelimComma, StringSplitOptions.RemoveEmptyEntries);
array[3] = (byte)arraytype;
int arrayIndex = 4;
temparray = Helper.GetLittleEndianByteArray(elements.Length - 1);
array[arrayIndex++] = temparray[0];
array[arrayIndex++] = temparray[1];
array[arrayIndex++] = temparray[2];
array[arrayIndex++] = temparray[3];
//elemetns[0] contains array type;
for (int i = 1; i < elements.Length; i++)
{
switch (arraytype)
{
case 'A': // Printable character
temparray[0] = (byte)elements[i][0];
break;
case 'c': //signed 8-bit integer
temparray[0] = (byte)sbyte.Parse(elements[i], CultureInfo.InvariantCulture);
break;
case 'C': //unsigned 8-bit integer
temparray[0] = byte.Parse(elements[i], CultureInfo.InvariantCulture);
break;
case 's': // signed 16 bit integer
Int16 int16value = Int16.Parse(elements[i], CultureInfo.InvariantCulture);
temparray = Helper.GetLittleEndianByteArray(int16value);
break;
case 'S'://unsinged 16 bit integer
UInt16 uint16value = UInt16.Parse(elements[i], CultureInfo.InvariantCulture);
temparray = Helper.GetLittleEndianByteArray(uint16value);
break;
case 'i': // signed 32 bit integer
int int32value = int.Parse(elements[i], CultureInfo.InvariantCulture);
temparray = Helper.GetLittleEndianByteArray(int32value);
break;
case 'I': // unsigned 32 bit integer
uint uint32value = uint.Parse(elements[i], CultureInfo.InvariantCulture);
temparray = Helper.GetLittleEndianByteArray(uint32value);
break;
case 'f': // float
float floatvalue = float.Parse(elements[i], CultureInfo.InvariantCulture);
temparray = Helper.GetLittleEndianByteArray(floatvalue);
break;
default:
throw new Exception(string.Format(Properties.Resource.BAM_InvalidOptValType, arraytype));
}
for (int tempIndex = 0; tempIndex < arrayTypeSize; tempIndex++)
{
array[arrayIndex++] = temparray[tempIndex];
}
}
}