Используй прямое преобразование типов:
char cValue = 10; int iValue = (int)cValue;
Но, будь очень внимателен, ведь и правда, возможна потеря данных.
Используй прямое преобразование типов:
Но, будь очень внимателен, ведь и правда, возможна потеря данных.
Изучаю MQL5.
При компиляции выдаёт это предуперждение.
Как от него избавиться? Приобразовать из типа int в тип
char - не нашёл в справочнике соответствующую функцию, преобразовать в строку - не помогает. Выдаёт
предупреждение, но уже другое.
Код, ниже, взят из справочника (раздел "символьные константы", почти самое начало):
//--- определим
символьные константы
Возможна потеря данных в процессе преобразования типов. Если я вместо переменных напрямую пишу значения - всё нормально.
P.S.
Предупреждение выдаётся в функциях StringSetCharacter. symbol_0 и symbol_9 в этих функциях не нравится компилятору.
Вы работаете со строками, поэтому:
string symbol_0='0';
а дальше - выбирайте вариант из 3-х, который по душе:
string symbol_9=symbol_0+'9'; // получим символ '09'
string symbol_9=StringToInteger(IntegerToString(StringToInteger(symbol_0)+StringToInteger('9'))); // получим символ '9'
string symbol_9=StringToInteger(IntegerToString(StringToInteger(symbol_0+'9'))); // получим символ
'9'
Вы работаете со строками, поэтому:
string symbol_0='0';
а дальше - выбирайте вариант из 3-х, который по душе:
string symbol_9=symbol_0+'9'; // получим символ '09'
string symbol_9=StringToInteger(IntegerToString(StringToInteger(symbol_0)+StringToInteger('9'))); // получим символ '9'
string symbol_9=StringToInteger(IntegerToString(StringToInteger(symbol_0+'9'))); // получим символ
'9'
Спасибо)
Да я понимаю, что разные результаты будут.
Когда работаем с int, то + это
математическое сложение. Соответственно складываются значения кодов этих символов. На выходе число.
Когда со строками, то + это конкатенация. На выходе - строка.
Но компилятор ругался на следующие строчки кода:
StringSetCharacter(test,0, symbol_0);
StringSetCharacter(test,1,
symbol_9);
В этих строчках происходит неявное приведение из типа int в тип ushort. В разделе приведение типов указано, что это приведение может
происходить с потерями, что компилятор и говорит.
Если изменить на:
StringSetCharacter(test,0, Ushort(symbol_0));
То компилятор
предупреждений не выдаёт, но возможные потери при приведении это не отменяет.
Тип ushort - 65535 значений, а тип int - намного больше.
Насколько я понял, если мы пытаемся засунуть в тип ushort значение большее,
чем 65535, то результат получается эквивалентным этому выражению: N % 65535 (
остаток
от деления искомого числа N на 65535).
Для char всё аналогично, только вместо 65535 - 255 и помнить, что нулевое - это
(-128), а 255 - (+127).
Функция print выводит код символа, если в качестве параметра передать ей переменную с типом char, uchar, ushort.
Вроде
с этим я разобрался...
Используй прямое преобразование типов:
Но, будь очень внимателен, ведь и правда, возможна потеря данных.
//+------------------------------------------------------------------+ //| StringLowerCase | //+------------------------------------------------------------------+ string StringLowerCase(string str) { string s = str; int lenght = StringLen(str) - 1, symbol; while(lenght >= 0) { symbol = StringGetChar(s, lenght); if((symbol > 64 && symbol < 91) || (symbol > 191 && symbol < 224)) s = StringSetChar(s, lenght, symbol + 32);// тут possible loss of data due to type conversion else if(symbol > -65 && symbol < -32) s = StringSetChar(s, lenght, symbol + 288);// тут possible loss of data due to type conversion lenght--; } return(s); } //+------------------------------------------------------------------+ //| StringUpperCase | //+------------------------------------------------------------------+ string StringUpperCase(string str) { string s = str; int lenght = StringLen(str) - 1, symbol; while(lenght >= 0) { symbol = StringGetChar(s, lenght); if((symbol > 96 && symbol < 123) || (symbol > 223 && symbol < 256)) s = StringSetChar(s, lenght, symbol - 32);// тут possible loss of data due to type conversion else if(symbol > -33 && symbol < 0) s = StringSetChar(s, lenght, symbol + 224);// тут possible loss of data due to type conversion lenght--; } return(s); }
Если не сложно помоги пожалуйста исправить..
Пример конвертаци на лету. Не благодарите!!!
int PONIT=(int)DOTS(iTime(_Symbol,PERIOD_CURRENT,w));
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Изучаю MQL5.
При компиляции выдаёт это предуперждение.
Как от него избавиться? Приобразовать из типа int в тип char - не нашёл в справочнике соответствующую функцию, преобразовать в строку - не помогает. Выдаёт предупреждение, но уже другое.
Код, ниже, взят из справочника (раздел "символьные константы", почти самое начало):
//--- определим символьные константы
Возможна потеря данных в процессе преобразования типов. Если я вместо переменных напрямую пишу значения - всё нормально.
P.S. Предупреждение выдаётся в функциях StringSetCharacter. symbol_0 и symbol_9 в этих функциях не нравится компилятору.