Если обнаруживается переполнение или потеря значимости, арж метическая функция возвращает соответствующий код ошибки

Код ошибки Интерпретация

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 в случае переполнения



Наши рекомендации