MqlTick to WebRequest

 
как можно передать struct MqkTick ( в бинарном виде ) по инету ? не получается преобразовать MqlTick в Массив данных тела HTTP-сообщения.
 
dimka8:
как можно передать struct MqkTick ( в бинарном виде ) по инету ? не получается преобразовать MqlTick в Массив данных тела HTTP-сообщения.
А в чем собственно проблема? Не умеете преобразовывать структуру в массив uchar?
 
Vasiliy Sokolov:
А в чем собственно проблема? Не умеете преобразовывать структуру в массив uchar?
по сей видимости не умею , я даун. если можно пример?
 
в инете открыл тест на IQ , сказали имбецил который может ухаживать за собой   ( подтирать зад)
 
dimka8:
по сей видимости не умею , я даун. если можно пример?

Необходимо использовать явный кастинг:

struct MqlTickChar
{
   char array[sizeof(MqlTick)];
};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   // Преобразуем MqlTick в набор байтов (хранится в массиве tick_char.array)
   MqlTick tick = {0};
   MqlTickChar tick_char;
   tick_char = (MqlTickChar)tick;
   // Преобразуем набор байтов в MqlTick
   tick = (MqlTick)tick_char;
}
 
Vasiliy Sokolov:

Необходимо использовать явный кастинг:

спасибо большое , из увиденного я понял только
struct MqlTickChar
{
   char array[sizeof(MqlTick)];
};
MqlTickChar tick_char;
на все остальное выдает ошибки . проще написать dll для QLocalSocket
 
dimka8:
спасибо большое , из увиденного я понял только на все остальное выдает ошибки

Правильно выдаёт. Ни в структуре MqlTick, ни в структуре MqlTickChar нет ни конструкторов копирования, ни перегрузки оператора "=", поэтому присвоение вида tick_char = (MqlTickCharr)tick (или наоборот) не сработает.

Чёт тоже не могу придумать, как это сделать. Функции StructToCharArray в МКЛ нет. Функции memcpy() тоже нет. Прямого доступа к памяти через указатели - тоже. Единственное, что пришло в голову - записать MqlTick в файл или пайп, а потом оттуда считать побайтово как char[]. Но это хардкор, да. ) А вот как по-простому...

 
Sergei Vladimirov:

Правильно выдаёт. Ни в структуре MqlTick, ни в структуре MqlTickChar нет ни конструкторов копирования, ни перегрузки оператора "=", поэтому присвоение вида tick_char = (MqlTickCharr)tick (или наоборот) не сработает.

Чёт тоже не могу придумать, как это сделать. Функции StructToCharArray в МКЛ нет. Функции memcpy() тоже нет. Прямого доступа к памяти через указатели - тоже. Единственное, что пришло в голову - записать MqlTick в файл или пайп, а потом оттуда считать побайтово как char[]. Но это хардкор, да. ) А вот как по-простому...

Никаких ошибок код не выдает и не должен, поскольку в приводимых структурах только базовые типы - их можно кастить без всяких копи-конструкторов.

Мне другое не понятно - на кой  фиг передавать через WebRequest именно в бинарном виде? HTTP-запрос отлично работает со строками и даже больше приспособлен для текста, а бинарные данные в нем нужно по-любому упаковывать.

 

А я и не проверил. Действительно, не выдаёт. Опростоволосился. Ну, тогда и проблемы нет.

Мне другое не понятно - на кой  фиг передавать через WebRequest именно в бинарном виде? HTTP-запрос отлично работает со строками и даже больше приспособлен для текста, а бинарные данные в нем нужно по-любому упаковывать.

Так задача и стояла преобразовать структуру в массив символов. Или вы имеете в виду, что поля структуры (дату и цены) передать просто как текст вида "01.09.2016 20:23:23, 1.2343, ...", а на стороне приёмника этот текст парсить? Лишние же операции. Зачем? 

 
Sergei Vladimirov:

Так задача и стояла преобразовать структуру в массив символов. Или вы имеете в виду, что поля структуры (дату и цены) передать просто как текст вида "01.09.2016 20:23:23, 1.2343, ...", а на стороне приёмника этот текст парсить? Лишние же операции. Зачем? 

Для http-запросов самым простым было бы посылать данные в url или через post payload (в том числе json-ом). Бинарные же данные нужно пихать в base64/BSON/protobuf. В каком случае будет больше "лишних" операций - я б не взялся утверждать. А вы уверены, что бинарное представление в MQL совпадет с бинарным представлением на сервере (который может быть разным в принципе)? Нужен протокол обмена, он подразумевает кодирование на одном конце и декодирование на другом.
 
Stanislav Korotky:
Для http-запросов самым простым было бы посылать данные в url или через post payload (в том числе json-ом). Бинарные же данные нужно пихать в base64/BSON/protobuf. В каком случае будет больше "лишних" операций - я б не взялся утверждать. А вы уверены, что бинарное представление в MQL совпадет с бинарным представлением на сервере (который может быть разным в принципе)? Нужен протокол обмена, он подразумевает кодирование на одном конце и декодирование на другом.

простые структуры (не содержащие внутри дин.массивов или строк) упаковываются с pack(1), то есть без прогалов, в хостовом порядке байт. То есть вываливаются в сеть (передаются в dll, преобразуются в char.array) как есть. То есть Mql структуры практически один-в-один переводятся в С-шные.

Извращаться с внешними запросами/ответами/протоколами imho лучше в DLL :-) WebRequest штука удобная, но не когда задержки становятся критичными..Прочесть раз в час/день что-то с сайта, иногда отослать торговый результат - это да, это стезя WebRequest. А постоянно читать/транслировать торговые сигналы и котировки в реальном времени - точно нет.

Причина обращения: