Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ida.final.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6 Mб
Скачать

Success SetHashLong(long id,char idx,long value);

Функция присваивает значение элементу ассоциативного массива. Ассоциативные массивы выгодно отличаются от остальных тем, что могут индексироваться строковыми значениями!

В остальном же с ними могут использоваться те же подходы, что и для разряженных массивов.

Однако, в отличие от разреженных массивов один и тот же индекс не может содержать числовое и строковое значение одновременно.

Пример использования:

auto a;

DeleteArray(GetArrayId("MyArray"));

a=CreateArray("MyArray");

SetHashLong(a,"Ivanov",0x66);

SetHashLong(a,"Cheputilo",0x77);

SetHashLong(a,"Alushta",0x67);

DeleteArray(a);

Операнд

Пояснения

id

Идентификатор массива

idx

Индекс массива (строковой!)

value

Присваиваемое значение типа «длинное целое»

Return

==return

Пояснения

==1

Успешное завершение

==0

Ошибка

Success SetHashString(long id,char idx,char value);

Функция присваивает значение элементу ассоциативного массива. Ассоциативные массивы выгодно отличаются от остальных тем, что могут индексироваться строковыми значениями!

В остальном же с ними могут использоваться те же подходы, что и для разряженных массивов.

Однако, в отличие от разреженных массивов один и тот же индекс не может содержать числовое и строковое значение одновременно.

Пример использования:

auto a;

DeleteArray(GetArrayId("MyArray"));

a=CreateArray("MyArray");

SetHashLong(a,"Ivanov",”Patron”);

SetHashLong(a,"Cheputilo",”Mouse”);

SetHashLong(a,"Alushta",”Metro Station”);

DeleteArray(a);

Операнд

Пояснения

id

Идентификатор массива

idx

Индекс массива (строковой!)

value

Присваиваемое значение типа «строка»

Return

==return

Пояснения

==1

Успешное завершение

==0

Ошибка

Long GetHashLong(long id,char idx);

Функция возвращает значение элемента ассоциативного массива типа «длинное целое»

Как уже говорилось выше один и тот же элемент не может содержать значения «строка» и «длинное целое» одновременно. Поэтому возникает возможность присвоить значение одного типа, а попытаться прочитать другого. Эта операция завершиться корректно и типы будут автоматически преобразованы.

При этом функция GetHaskLong всегда возвращает четыре первые байта, сколько бы строка ни занимала на самом деле. Если она была короче, - то остаток будет представлять собой мусор и содержать непредсказуемые значения.

Например:

auto a;

DeleteArray(GetArrayId("MyArray"));

a=CreateArray("MyArray");

SetHashString(a,"Ivanov","Patron");

Message("%s \n",

GetHashLong(a,"Ivanov")

);

DeleteArray(a);

Patr

Необходимо помнить, что IDA учитывает регистр индексов. Так “Ivanov” и “ivanov” это два разных индекса и при попытке прочитать присвоенное значение функция возвратит ноль.

Например:

auto a;

DeleteArray(GetArrayId("MyArray"));

a=CreateArray("MyArray");

SetHashLong(a,"Ivanov",0х66);

Message("%x \n",

GetHashLong(a,"ivanov")

);

DeleteArray(a);

0

Возникает неоднозначность, – то ли действительно возникла ошибка, то ли такое значение имеет элемент?

В остальном же никаких проблем с использованием этой функции не возникает. Например:

auto a;

DeleteArray(GetArrayId("MyArray"));

a=CreateArray("MyArray");

SetHashLong(a,"Ivanov",0х66);

Message("%x \n",

GetHashLong(a,"Ivanov")

);

DeleteArray(a);

0x66

Операнд

Пояснения

id

Идентификатор массива

idx

Индекс массива (строковой!)

Return

==return

Пояснения

!=0

Значение элемента массива

==0

Ошибка

Значение элемента массива

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]