Преобразование типов

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

ЗначокВНИМАНИЕ

Без применения явного преобразования типа действия CTRL по преобразованию типов могут приводить к непредсказуемым результатам!

Явное преобразование типа

Оператор приведения типа используется для явного приведения (преобразования) типа данных. Оператор приведения типа указывается непосредственно перед выражением, тип результата которого необходимо преобразовать:
 

—> Оператор приведения типа —>Выражение —>

Значение выражения преобразуется в тип, задаваемый оператором приведения типа.

 

string s1 = «123»;

float f1 = 12.345;
 

// Тип данных результата выражения «s1+f1» не может быть предсказан заранее, поскольку

// возможно либо преобразование значения «s1» в число с плавающей точкой, либо преобразование значения «f1» в строку (т.е. результатом может быть либо конкатенация строк «12312.345», либо сумма двух чисел, равная 135.345)

s1 + f1

 

// Ниже «f1» преобразуется в строку и добавляется к «s1»

s1 + (string)f1;

Преобразование в тип «string»

При присваивании значения «простого» типа данных строковой переменной, к значению автоматически применяется функция sprintf() с минимальным количеством спецификаторов. Строковая переменная содержит результат данной операции. При преобразовании типа «bit32» к строковому возвращается строка, состоящая из соответствующих символов ‘0’ — ‘1’.

ЗначокПРИМЕР:

string bucket;
char contents = «a»;
bucket = 3.14;
// Переменная bucket содержит значение «3.14», которое представляет собой набор символов, а не число!
bucket = contents;
// bucket содержит значение «a»

ПРИМЕЧАНИЕ

При преобразовании типа «DpIdentifier» неизвестной точки данных в строку возвращается номер «DpIdentifier».

Преобразование строкового значения в другой тип

Строка легко преобразуется в типы «int», «unsigned» или «float». При преобразовании в тип «float» необходимо проверить региональные настройки формата для числовых значений. В разных странах в качестве разделителя целой и дробной частей используются различные символы. В том случае, если строковое значение присваивается переменной типа «32bit», то каждая «1» в строке устанавливает соответствующий бит в переменной типа 32bit, а каждый «0» — сбрасывает соответствующий бит. Другие символы в строке не вызывают никаких изменений в соответствующем бите.

  1. string s = «00000011111100000011111100000011»;
    bit32 b = s;

Значение переменной «s» записывается в переменную «b» типа «bit32».

Строки, содержащие значения байтов в шестнадцатеричном представлении, могут быть присвоены переменным типа «blob».

ЗначокПРИМЕР:

  1. string s = «FFAB003A»;
    blob b = s;

В результате выполнения вышеуказанных операторов переменная «b» будет содержать 4 байта с шестнадцатеричными значениями FF, AB, 00 и 3A.

В примере выше строка также может иметь следующий формат:

  1. string s = «FF,AB,00,3A»;

Преобразование значения с типом time в другой тип

Значения типа «time» обрабатываются особым образом. Переменные типа «time» могут неявно приводиться к типу «string» и наоборот. «Неявное» приведение означает преобразование типов без использования соответствующего оператора. Форматы отображения значений времени: (также допускается двузначное представление года, например, «16» вместо «2016»)

  1. [[ГГ]ГГ.ММ.ДД] ЧЧ[:ММ[:СС[.мсек]]]

Обязательным является указание часа (0-24 час). Части, отведённые под дату и время, отделяются друг от друга пробелом. При отсутствии даты по умолчанию будет взята дата 01.01.1970 г.

ЗначокПРИМЕР:

time zerohoursten;
string tstring;
zerohoursten = «00:10»;
/* Переменная zerohoursten типа time инициализирована строкой «00:10». */
tstring = zerohoursten;
/* tstring содержит значение «1970.01.01 00:10:00.000» */

При преобразовании переменной типа «time» с двузначным представлением года, значение < 70 интерпретируется как год 21-го века (20xx), а значение >70 интерпретируется как год 20-го века (19хх).

ЗначокПРИМЕР:

main()
{
time t1, t2;
t1 = «98.1.1»; // Переменной t1 присвоено значение 1 января 1998
t2 = «29.10.11»; // Переменной t2 присвоено значение 11 октября 2029
DebugN(t1, t2);
}

В том случае, если строковая переменная имеет значение «now», то она преобразуется в текущее время.

Преобразование типов int, unsigned и float в тип time

Значения c типами «int», «unsigned» и «float» могут присваиваться переменным с типом «time». Значения типов «int» или «unsigned», а также целая часть значения с типом «float» преобразуются в секунды, а дробная часть рассматривается как миллисекунды.

ЗначокПРИМЕР:

time t1, t2;

t1 = «2000.01.01 12:00:00»;
//…
t1 -= 3600;
// Значение t1 уменьшено на один час один час
t2 += 1.003;
// Значение t2 увеличено на 1003 миллисекунды

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *