В MQL тип string имеет внутреннее представление в виде 8 байт, int -
4 байта, а в буфер надо пометить код символа в шестнадцатиричном
виде и в одном байте.
Из МТ можно только код символа представить целым типом как 0x53 (символ "S"), 0x0D перевод строки ("\n")- но вот вопрос как из строковой переменной получить такое представление.
Функция приведенная выше дает шестнадцатиричный код, но в виде строковой переменной, а надо в int.
cBuffer[0]=DecToHex(StringGetChar("E",0)); получим 45.
Добавив в функции DecToHex(int smbl) одну строку s="0x"+s; получим то что надо 0x45, но опять же тип string, а нужен int для того чтобы провести операции сдвига.
Вот код, как в ручном варианте удалось заполнить буфер и корректно записать файл по ftp на сервер.
SA
TEST
TEST
Т.е. в одну ячейку буфера пишется со сдвигом четыре символа. Тогда получается как в винде, на один символ один байт.
Вопрос остался совсем за малым....:)
Уважаемые программисты подскажите пожалуйста, наверняка вопрос (решение его) лежит где то на поверхности.
C уважением
Из МТ можно только код символа представить целым типом как 0x53 (символ "S"), 0x0D перевод строки ("\n")- но вот вопрос как из строковой переменной получить такое представление.
Функция приведенная выше дает шестнадцатиричный код, но в виде строковой переменной, а надо в int.
cBuffer[0]=DecToHex(StringGetChar("E",0)); получим 45.
Добавив в функции DecToHex(int smbl) одну строку s="0x"+s; получим то что надо 0x45, но опять же тип string, а нужен int для того чтобы провести операции сдвига.
Вот код, как в ручном варианте удалось заполнить буфер и корректно записать файл по ftp на сервер.
int cBuffer[64]; cBuffer[0]=0x53+(0x41<<8)+(0x0D<<16)+(0x0A<<24); cBuffer[1]=0x54+(0x45<<8)+(0x53<<16)+(0x54<<24); cBuffer[2]=0x0D+(0x0A<<8)+(0x54<<16)+(0x45<<24); cBuffer[3]=0x53+(0x54<<8)+(0x0D<<16)+(0x0A<<24); int hw=FtpOpenFileA(hwURL, FileName, 1073741824, 2, 1); bool res_WrF=InternetWriteFile(hw, cBuffer, 64, dwBytesWrite);В фал записывается
SA
TEST
TEST
Т.е. в одну ячейку буфера пишется со сдвигом четыре символа. Тогда получается как в винде, на один символ один байт.
Вопрос остался совсем за малым....:)
Уважаемые программисты подскажите пожалуйста, наверняка вопрос (решение его) лежит где то на поверхности.
C уважением
(код сивола 1)+(код символа 2)*256+(код символа 2)*256^2..... что-то типа
такого
Код символа в МТ от 1 до 256, т.е в десятичной системе, а надо же
получить в шестнадцатиричной, но поместить в переменную типа
int так как приведено выше
Типа int Func(string n) -->> int h=Func("\n"); -->> h=0x0D;
0x53Может можно использовать какую либо функцию от библиотек винды для получения кода символа в шестнадцатиричной системе из строковой переменной.
Типа int Func(string n) -->> int h=Func("\n"); -->> h=0x0D;
С чего вы это взяли?
Не понял, что взял?
Что коды символов от 1 до 256? Или что код, например, символа "S" в винде 53 в шестнадцатиричном виде, а в МТ это представлено в десятичной как 0x53.
Что коды символов от 1 до 256? Или что код, например, символа "S" в винде 53 в шестнадцатиричном виде, а в МТ это представлено в десятичной как 0x53.
То что вам зачем-то нужны 16-ые коды
Если нетрудно, напишите стоку кода размещения в одной ячейке буфера 4 символов, чтобы подставить
его в функцию InternetWriteFile().
Да, Вы правы, вот такая форма записи прошла. Только перевода строки не произошло.
cBuffer[0]='F'+'G'<<8 +'S'<<16 +'\n'<<24;
А что InternetWriteFile строковую переменную не принимает? Тогда в массив
int предложенным мной способом и по ссылке его передавать. Не
знаю надо пробовать.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
для записи строковой переменной в файл на FTP сервере.
Есть функция преобразования символов в шестнадцатиричный код, а вот такого типа переменных в mql нет.
Пробовал буфер типа string, но запись данных в файл не производится, записывается нулевая строка, т.е. получаем пустой файл.
Как можно получить буфер с шестнадцатиричными значениями? Или может еще как то решить это вопрос.
С уважением