Example #1
0
        /// <summary>
        /// Преобразование четырех символов "HEX-представления" в int16
        /// </summary>
        /// <param name="value">Возвращаемое значение</param>
        /// <param name="source">Исходный массив "HEX-данных"</param>
        /// <param name="startOutPos">Стартовая позиция во входном массиве для преобразования</param>
        private bool HEXToInt16(ref int value, Char[] source, int startInPos)
        {
            // Если указываем такую позицию для вывода текстового представления,
            // которая выходит за допустимые пределы целевого массива, сообщаем
            // об этом
            if ((startInPos + 3) > source.GetUpperBound(0))
            {
                return false;
            }

            // Изначально обнуляем возвращаемое значение
            value = 0;

            // Преобразуем четыре текстовых представления "HEX" в данные переменной "int"
            for (int i = startInPos, shift = 12; i < (startInPos + 4); i++, shift -= 4)
            {
                // Изначально полагаем, что символ не найден в словаре "_HEX"
                bool letterSearchRes = false;

                // Индексный эквивалент символа в словаре
                int letterIdx = 0;

                // Пробегаемся по всему словарю "_HEX"
                for (int j = 0; j < 16; j++)
                {
                    // Если текущий символ совпал с имеющимся в словаре
                    if (source[i] == _HEX[j])
                    {
                        letterSearchRes = true;
                        letterIdx = j;

                        break;
                    }
                }

                // Если хотя бы один символ не был найдерн в словаре,
                // сообщаем что произошла ошибка декодирования параметров
                if (letterSearchRes != true)
                {
                    return false;
                }

                // Если дошли до данного участка кода, можно преобразовывать
                // текущий индекс к требуемому разряду целевой переменной int16
                value += (letterIdx << shift);
            }

            return true;
        }
	public void TestGetUpperBound() {
		{
			bool errorThrown = false;
			try {
				char[] c = {'a', 'b', 'c'};
				c.GetUpperBound(-1);
			} catch (IndexOutOfRangeException) {
				errorThrown = true;
			}
			Assert("#H61", errorThrown);
		}
		{
			bool errorThrown = false;
			try {
				char[] c = {'a', 'b', 'c'};
				c.GetUpperBound(1);
			} catch (IndexOutOfRangeException) {
				errorThrown = true;
			}
			Assert("#H62", errorThrown);
		}

		char[] c1 = new Char[5];
		AssertEquals("#H63", 
			     4, c1.GetUpperBound(0));

		char[,] c2 = new Char[4,6];
		AssertEquals("#H64", 
			     3, c2.GetUpperBound(0));
		AssertEquals("#H65", 
			     5, c2.GetUpperBound(1));
	}
Example #3
0
        /// <summary>
        /// Преобразование значения int в четыре символа "HEX-представления"
        /// </summary>
        /// <param name="value">Исходное значение</param>
        /// <param name="target">Целевой массив для вывода</param>
        /// <param name="startOutPos">Стартовая позиция в массиве для преобразования</param>
        private bool Int16ToHEX(int value, ref Char[] target, int startOutPos)
        {
            // Если указываем такую позицию для вывода текстового представления,
            // которая выходит за допустимые пределы целевого массива, сообщаем
            // об этом
            if ((startOutPos + 3) > target.GetUpperBound(0))
            {
                return false;
            }

            // Преобразуем данные переменной в четыре текстовых представления "HEX"
            target[startOutPos + 3] = _HEX[((value & 0x0000000F) >> 0)];
            target[startOutPos + 2] = _HEX[((value & 0x000000F0) >> 4)];
            target[startOutPos + 1] = _HEX[((value & 0x00000F00) >> 8)];
            target[startOutPos + 0] = _HEX[((value & 0x0000F000) >> 12)];

            return true;
        }