Если обнаруживается переполнение или потеря значимости, арж метическая функция возвращает соответствующий код ошибки
Код ошибки Интерпретация
E_CLINT_BOR Недопустимое основание в str2clint_l()
E_CL1NT_DBZ Деление на нуль
E_CLINT_MAL Ошибка при распределении ресурсов памяти
E_CLINT_MOD Четные модули в умножении по Монтгомери
E_CLINT_NOR Регистр недоступен
E_CLINT_NPT Пустой указатель в качестве аргумента
E_CLINT_OFL Переполнение
E CLINT UFL Потеря значимости
1. Операции ввода, вывода и преобразования больших чисел
1.1 Инициализация переменных типа CLINT
Ввод начальных значений (инициализация) в переменную типа CLINT не может быть осуществлен операцией присваивания , а должен производится только одной из следующих функций преобразования:
· числа типа ULONG(unsigned long unt) в CLINT
· строки символов в CLINT
· вектора ,элементами которого являются байты, в CLINT
Преобразование значения типа ULONG в CLINT-объект
Синтаксис: void ul2clint_l (CLINT num, ULONG ul);
Вход: ul (преобразуемое значение)
Выход: num (выходной CLINT-объект)
Преобразование строки в CLINT-объект
Синтаксис: int str2clint_l (CLINT n, char *str, USHORT base);
Вход: str -указатель на последовательность типа char
base -основание числового представления строки,
2 <= base<=16
Выход: n (выходной CLINT-объект)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_BOR, если base < 2 или base > 16
E_CLINT_OFL в случае переполнения
E_CLINT_NPT, если в str передан пустой указатель
Преобразование байтового вектора в CLINT-объект
Синтаксис: int byte2clint_l (CLINT n, UCHAR* bytstr, int len);
Вход: bytestr (указатель на последовательность типа UCHAR) len (длина байтового вектора)
Выход: n_l (выходной CLINT-объект)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_OFL в случае переполнения
E_CLINT_NPT, если bytstr пустой указатель
#include <FLINT.h>
#include <stdio.h>
#include <conio.h>
#define ClintToStr xclint2str_l // Переопределение функции xclint2str_l
int main(int argc, char* argv[])
{
CLINT a1,a2,a3; // Объявление объектов CLINT
// Инициализация объекта CLINT строкой цифр
char *s1 =new char; s1="9293490"; // Строка 10-х цифр
printf("S1= %s\n",s1);
str2clint_l (a1,s1,10); //Инициализация строкой
printf("BIN %s\n",ClintToStr(a1,2,1));
printf("OCT %s\n",ClintToStr(a1,8,1));
printf("DEC %s\n",ClintToStr(a1,10,1));
printf("HEX %s\n",ClintToStr(a1,16,1));
char *s2 =new char;s2="0FAA56CD"; // Строка 16-х цифр
printf("\nS2= %s\n",s2);
str2clint_l (a2,s2,16); //Инициализация строкой
printf("BIN %s\n",ClintToStr(a2,2,1));
printf("OCT %s\n",ClintToStr(a2,8,1));
printf("DEC %s\n",ClintToStr(a2,10,1));
printf("HEX %s\n",ClintToStr(a2,16,1));
char *s3 =new char;s3="00101010"; // Строка 2-х цифр
printf("\nS3= %s\n",s3);
str2clint_l (a3,s3,2); //Инициализация строкой
printf("BIN %s\n",ClintToStr(a3,2,1));
printf("OCT %s\n",ClintToStr(a3,8,1));
printf("DEC %s\n",ClintToStr(a3,10,1));
printf("HEX %s\n",ClintToStr(a3,16,1));
// Инициализация объекта CLINT числом
ULONG b=19000; // Переменная типа ULONG(unsigned long int)
u2clint_l(a1,b);
printf("\n a1 <- b= %s\n",ClintToStr(a1,10,1));
// Инициализация объекта CLINT массивом байт
unsigned char B[]={0,1,5}; byte2clint_l(a1,B,3);
printf("\n a1 <-[B] DEC = %s\n",ClintToStr(a1,10,1));
return 0;
}
Рисунок Применение функции ввода-вывода
1.2 Преобразование переменных типа CLINT в базовые типы
Преобразование CLINT-объекта в строку символов
Синтаксис: char * xclint2str_l (CLINT n_l, USHORT base, int base);
Вход: _ n l (преобразуемый CLlNT-объект)
Возврат:
base (основание численного представления искомой строки)
showbase (значение * 0: численное представление имеет префикс
«Ох» для base = 16 или «0B» для base = 2.
Значение = 0: префикса нет).
указатель на полученную строку символов, если все в порядке NULL - если 2 < base или base > 16
Преобразование CLINT-объекта в байтовый вектор
Синтаксис: UCHAR * clin(2byte_l (CLINT n_l, int *ton);
Вход: nj (преобразуемый CLINT-объект)
len (длина генерируемого байтового вектора)
Возврат:
указатель на полученный байтовый вектор NULL,если в len передан пустой указатель
Дополнительные операции с CLlNT-объектами
Копирование CLINT
Синтаксис:void cpy_l (CLINT des, CLINT src);
Вход: src (присваиваемое значение)
Выход: des (объект назначения)
Перестановка значений двух CLlNT-объектов
Синтаксис: void fswap_l (CLINT a, CLINT b);
Вход: a, b (переставляемые значения)
Выход: a, b
Число значащих двоичных разрядов CLINT-объекта
Синтаксис: unsigned int ld_l (CLINT a);
Вход: a (операнд)
Выход: Число значащих двоичных разрядов числа а
Основные арифметические операции с большими числами типа CLINT
Функции сложения
Сложение
Синтаксис: int add_l (CLINT a, CLINT b, CLINT с);
Вход: a, b (слагаемые)
Выход: с (сумма)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_OFL в случае переполнения
Инкремент (увеличение CLINT-обьекта на 1)
Синтаксис: int inc_l (CLINT a);
Вход: а (слагаемое)
Выход: a (сумма)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_OFL в случае переполнения