Теперь можно познакомиться и с совместимыми типами. Под совместимыми типами понимаются такие типы данных, которые схожи по своим признакам, но хранят данные в разном виде. Например, есть несколько видов строк: строка, оканчивающаяся нулем, и строка, первый байт которой указывает на ее длину. Вроде и то и другое — строки, но если где-то нужен определенный тип строки, то придется преобразовывать свою строку именно в тот формат, который нужен функции или процедуре, иначе произойдут конфликты.
Допустим, что у вас есть строка типа string и вы хотите ее преобразовать в pchar. Для такого преобразования нужно написать требуемый вам тип и в скобках указать свою строковую переменную:
В этом примере переменная Mystr имеет тип string, а мы приводим ее к виду pchar. Такое преобразование строк мы будем делать очень часто при вызове WinAPI-функций, потому что там большинство строк имеет именно pchar тип.
Точно таким же образом преобразуются не только строки, но и объекты, и числовые переменные одинакового типа, но разные по размеру. Например, у вас есть два числа integer и byte. Оба они отображают целые числа, но byte меньше и при прямом присваивании вы получите предупреждение о том, что данные будут потеряны. Вы можете явно указать компилятору, что вы преобразовываете правильно. Вот приблизительный пример такого присваивания:
var i:Integer; j: byte;
begin i:=10; j:=byte(i);
end;
Когда вы попытаетесь без преобразования присвоить переменной j значение i, то компилятор выдаст предупреждение, потому что i может хранить большие числа, которые просто не поместятся в переменную j. Но если явно указать, что необходимо приведение типов, то это скажет компилятору, что мы контролируем ситуацию, и нечего надоедать нам своими предупреждениями.