Особенности языка mql5, тонкости и приёмы работы - страница 163
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
нет я бы заметил. Хотя не исключаю, что в некоторых случаях(при работе с юникод) такое возможно. В Java, например, тип char - 2 байта.
Пробовал парсить данные с криптобиржи в двух вариантах: через эту библиотеку JSON и через работу с массивом char.
Разница получилась по скорости в 700(!!!) раз. Был в шоке. Возможно была далеко не лучшая реализация JSON.
символ это 16LE и строки очевидно из паскаля . Кстати и массивы из фортрана
нет я бы заметил. Хотя не исключаю, что в некоторых случаях(при работе с юникод) такое возможно. В Java, например, тип char - 2 байта.
Пробовал парсить данные с криптобиржи в двух вариантах: через эту библиотеку JSON и через работу с массивом char.
Разница получилась по скорости в 700(!!!) раз. Был в шоке. Возможно была далеко не лучшая реализация JSON.
При передаче mql string в dll, на стороне dll, тип mql string принимается как wchar_t*
А не соответствие размера типов не только в Java можно встретить, это зависит от типа архитектуры, не помню чего, или операционной системы, или железа.
700 раз? Фигасе, я как раз эту библиотеку отложил для JSON парсинга, значит не стоит она того?
И лучше строки переводить StringToCharArray и в цикле парсить массив?
700 раз? Фигасе, я как раз эту библиотеку отложил для JSON парсинга, значит не стоит она того?
И лучше строки переводить StringToCharArray и в цикле парсить массив?
Думаю, что да. Хотя нужно всегда проверять. Делать замеры. Не исключаю, что функции работы со строками были написаны не лучшим образом, а сейчас их исправили.
Эти замеры я делал больше года назад.
Кода, конечно же, будет больше при работе с char массивами, но зато более гибкие возможности.
А скорее всего под mql стрингом там short[] или wchar_t[] или wchar_t*
Ведь строки mql в юникоде, а utf это 2 байта.
А StringToCharArray преобразует из short[] в char[]
юникод != utf && utf != 2байта (utf utf'y рознь) && MSVC не эталон
Смысл wchar_t - вместить любой поддерживаемый символ в одном wchar_t (ну о мелкомягких свой путь), а потоки ввода вывода сами конвертируют в/из кодировки локали. Никаких гарантий размера/кодировки. Когда принимаете в длл wchar_t, задумайтесь, а правильно ли это? Ну если конечно вообще интересно смотреть за пределы песочницы во взрослый мир.
юникод != utf && utf != 2байта (utf utf'y рознь) && MSVC не эталон
Смысл wchar_t - вместить любой поддерживаемый символ в одном wchar_t (ну о мелкомягких свой путь), а потоки ввода вывода сами конвертируют в/из кодировки локали. Никаких гарантий размера/кодировки. Когда принимаете в длл wchar_t, задумайтесь, а правильно ли это? Ну если конечно вообще интересно смотреть за пределы песочницы во взрослый мир.
Да, я знаю что Unicode и UTF, это разные кодировки, и по идее чем то отличаются.
Просто так получилось, хотел написать и сократить слово юникод, наверно не удачно.
Хотя справка по Unicode гласит, что стандарт включает в себя знаки почти всех письменных языков мира.
Стандарт состоит из двух основных частей: универсального набора символов (англ. Universal character set, UCS) и семейства кодировок (англ. Unicode transformation format, UTF)
По этому как я думаю, Unicode уже содержит в себе кодировки UTF, по этому так выразился для сокращения написания слова.
Насчёт wchar_t* правильно или нет, даже не знаю.
Использовал то что в примерах Рената, из статьи как писать dll.
mql5 строки ведь в Unicode, который содержит в себе UTF, по этому думаю логично что в примере статьи используется wchar_t*
Чтобы вместить любой поддерживаемый символ в одном wchar_t.
Насчёт никаких гарантий размера/кодировки, даже не знал об этом, наверно тогда для чистоты использовать сишный short* ?
Если он конечно будет корректно поддерживаться IDE MSVC.
Так как на обычный true среда ругается, и подавай ей TRUE.
UTF-8 и UTF-16 имеют соответствующую битность.
В UTF-8 языковые страницы переключаются специальными кодами.
UTF-16 включает всё разнообразие символов одновременно.
UTF-8 и UTF-16 имеют соответствующую битность.
В UTF-8 языковые страницы переключаются специальными кодами.
UTF-16 включает всё разнообразие символов одновременно.
Ну как я понял из того, что многие пишут на форуме, строки mql5 как раз в UTF-16
А в mql документации пишут:
Текстовая строка представляет собой последовательность символов в формате Unicode с завершающим нулем на конце.
По этому фиг поймёшь, в какой же всё таки кодировке mql5 строки.
А если Unicode содержит в себе уже все семейства UTF, зачем тогда вообще использовать слово UTF, и вводить путаницу.
Unicode и всё, просто и понятно.
Или нужно говорить так?
Unicode с битностью UTF-16 ?
Вообще кто то из разработчиков ранее пиал, что
mql тип string состоит из двух частей, буфер 8 байт и указатель 4 байта, в итоге 12 байт.
Да, я знаю что Unicode и UTF, это разные кодировки, и по идее чем то отличаются.
Просто так получилось, хотел написать и сократить слово юникод, наверно не удачно.
Хотя справка по Unicode гласит, что стандарт включает в себя знаки почти всех письменных языков мира.
Стандарт состоит из двух основных частей: универсального набора символов (англ. Universal character set, UCS) и семейства кодировок (англ. Unicode transformation format, UTF)
По этому как я думаю, Unicode уже содержит в себе кодировки UTF, по этому так выразился для сокращения написания слова.
Насчёт wchar_t* правильно или нет, даже не знаю.
Использовал то что в примерах Рената, из статьи как писать dll.
mql5 строки ведь в Unicode, который содержит в себе UTF, по этому думаю логично что в примере статьи используется wchar_t*
Чтобы вместить любой поддерживаемый символ в одном wchar_t.
Вы запутались. Юникод - таблица символов с кодами, когда-то она влезала в 0-65535 (2 байта), потом выросла. А тратить 4 байта на символ жирно. Тут и сгодился utf - кодировка с переменной длиной (например, utf-8 кодирует ASCII символы одним байтом). Поэтому юникод (таблица) никакой utf в себе не содержит.
Насчёт никаких гарантий размера/кодировки, даже не знал об этом, наверно тогда для чистоты использовать сишный short* ?
Если он конечно будет корректно поддерживаться IDE MSVC.
Так как на обычный true среда ругается, и подавай ей TRUE.
В стандарт всунули char16_t, char32_t, типы с фиксированным размером. У wchar_t смысл иной.
Ну как я понял из того, что многие пишут на форуме, строки mql5 как раз в UTF-16
А в mql документации пишут:
Текстовая строка представляет собой последовательность символов в формате Unicode с завершающим нулем на конце.
По этому фиг поймёшь, в какой же всё таки кодировке mql5 строки.
А если Unicode содержит в себе уже все семейства UTF, зачем тогда вообще использовать слово UTF, и вводить путаницу.
Unicode и всё, просто и понятно.
Или нужно говорить так?
Unicode с UTF-16 битностью ?
Это ещё не всё.
Как ANSI Cyrillic = CP1251, так
Unicode:
UTF-8 = CP65001, // UNIX/Linux
UTF-16LE = CP1200, // Windows
UTF-16BE = CP1251,
UTF-32LE = ?,
UTF-32BE = ?,
ISO10646:
UCS-2 ~ UTF-16
UCS-4 = UTF-32
Путаница? Не, не слыхали.
UTF-8 и UTF-16 имеют соответствующую битность.
В UTF-8 языковые страницы переключаются специальными кодами.
UTF-16 включает всё разнообразие символов одновременно.
Какие кодовые страницы, о чем вы вообще? "специальными кодами" определяется кол-во байт для кодирования символа, т.к. кодировка с переменной длинной. UTF-8 не хуже UTF-16 закодирует любой символ юникода. И utf-16 с переменной длиной (суррогатные пары).