程序库: TypeToBytes - 页 6 1234567 新评论 Sergey Likho 2020.03.31 09:44 #51 代码将结构转换为字符串 #include <Data_String.mqh> #define DEFINE_STRING(A) \ struct STRING##A \ { \ private: \ short Array[A]; \ \ public: \ void operator =( const string Str ) \ { \ ::StringToShortArray(Str, this.Array); \ return; \ } \ \ string operator []( const int = 0 ) const \ { \ return(::ShortArrayToString(this.Array)); \ } \ }; DEFINE_STRING(120) // 类似于字符串,最多有 128 个字符。 #undef DEFINE_STRING struct str_Message { int cnt; bool res; double ter; STRING120 str; }; void OnStart() { //--- str_Message a; a.cnt = 10; a.res = false; a.ter = 20.0123; a.str = "hello world"; Print(DATA_STRING::ToString(str1);); } // Результат //2020.03.31 10:43:18.320 StructTest2 (EURUSD,H1) CgAAAAClvcEXJgM0QGgAZQBsAGwAbwAgAHcAbwByAGwAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 如何进行反向转换?(从字符串到结构体) fxsaber 2020.03.31 11:07 #52 Sergey Likho:代码将结构转换为字符串如何进行反向转换?(从字符串到结构体) const string Str = DATA_STRING::ToString(a); // 将结构转换为字符串。 str_Message Tmp[1]; // 从字符串中获取结构数组 if (DATA_STRING::FromString(Str, Tmp)) { ArrayPrint(Tmp); Print(Tmp[0].str[]); Print(_R(Tmp) == a); // 验证数据是否与原始数据一致。 } // 从字符串中获取结构。 // Tmp[0] = DATA_STRING::FromString<str_Message>(Str);// 如果没有赋值运算符(参见 STRING120::operator =),则可以这样做。 fxsaber 2021.04.26 10:33 #53 图书馆功能的另一种应用。 Enrique Dangeroux 2021.06.29 14:53 #54 //+------------------------------------------------------------------+ //|测试。mq5 //|2021 年 MetaQuotes 有限公司版权所有。| //|https://www.mql5.com || //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include <TypeToBytes.mqh> CONTAINER <uchar> Container; int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 专家去初始化函数| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| 专家勾选功能| //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ 黄色一行代码已无法编译。它给出了以下错误(版本号 2980): 有什么办法可以解决问题吗? fxsaber 2021.06.29 15:15 #55 Enrique Dangeroux:黄色代码行不再编译。它会产生以下错误(版本号 2980):有什么办法可以解决问题吗? 关于交易、自动交易系统和测试交易策略的论坛 库:SingleTesterCache fxsaber, 2021.06.21 02:42 pm. 在 TypeToBytes.mqh 中,将{0} 替换为{}。 Enrique Dangeroux 2021.06.29 15:49 #56 谢谢。 fxsaber 2021.10.31 19:34 #57 已更新。绕过了发现的一个功能。以前该功能会对_ArrayCopy 和CONTAINER 产生负面影响。 Edgar Akhmadeev 2024.05.05 21:58 #58 我用你们的库编写了一个函数,可以将任意长度的字符串保存到全局变量 中。我并不完全理解,所以我肯定没有百分之百地使用它。 有没有更有效的使用方法? #include <TypeToBytes.mqh> //-------------------------------------------------------------------------------------------------- string GVarGetString(string name) { double dbl[]; // 读取变量的各个部分:Name、Name(1)、Name(2)、... for (int i = 0; ; ++i) { string s = (i == 0)? "" : "(" + (string)i + ")"; double t = GlobalVariableGet(name + s); if (t == 0) break; MyArrayResize(dbl, i + 1); dbl[i] = t; } uchar tmp0[], tmp[], tmp1[]; _ArrayCopy(tmp0, dbl); if (tmp0[0] != 0) // 未压缩 return CharArrayToString(tmp0); else { // 压缩 ArrayCopy(tmp, tmp0, 0, 1); CryptDecode(CRYPT_ARCH_ZIP, tmp, tmp1, tmp1); return CharArrayToString(tmp1); } } //-------------------------------------------------------------------------------------------------- void GVarSetString(string name, string val) { double dbl[]; uchar tmp[]; uchar zero[1]; int cnt = CryptEncode(CRYPT_ARCH_ZIP, _R(val).Bytes, tmp, tmp); if (cnt >= StringLen(val)) { // 未压缩 string str[1]; str[0] = val; _ArrayCopy(dbl, str); } else { // 压缩 _ArrayCopy(dbl, zero, 0, 0, 1); // Byte[0] == 0 - 已压缩 _ArrayCopy(dbl, tmp, 1); // 来自字节[1]的数据 } // 写出变量的各个部分:Name、Name(1)、Name(2)、... cnt = ArraySize(dbl); for (int i = 0; i < cnt; ++i) { string s = (i == 0)? "" : "(" + (string)i + ")"; GlobalVariableSet(name + s, dbl[i]); } GlobalVariablesFlush(); } fxsaber 2024.05.06 06:20 #59 Edgar Akhmadeev 全局变量 中。我并没有完全理解,所以我肯定没有百分之百地使用它。 有没有更有效的使用方法? 看看这个选项。 对全局变量使用CONTAINER<double> 也很方便。 Нужны ли глобальные переменные терминала типа string? - Используйте темплейты, чтобы разработчики платформы отвлекались на всякую блажь. 2017.04.08Mikhail Dovbakhwww.mql5.com и динамическое формирование имени массива не обязательно строкового. Отдельный тип глобальных переменных - скорее всего не добавят. таким образом можно записывать и считывать из глобальных переменных строки Edgar Akhmadeev 2024.05.06 13:36 #60 fxsaber #:查看此选项。对全局变量使用CONTAINER<double> 也很方便。 谢谢 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
代码将结构转换为字符串
如何进行反向转换?(从字符串到结构体)
代码将结构转换为字符串
如何进行反向转换?(从字符串到结构体)
黄色一行代码已无法编译。它给出了以下错误(版本号 2980):
有什么办法可以解决问题吗?
黄色代码行不再编译。它会产生以下错误(版本号 2980):
有什么办法可以解决问题吗?
关于交易、自动交易系统和测试交易策略的论坛
库:SingleTesterCache
fxsaber, 2021.06.21 02:42 pm.
在 TypeToBytes.mqh 中,将{0} 替换为{}。
已更新。绕过了发现的一个功能。以前该功能会对_ArrayCopy 和CONTAINER 产生负面影响。
我用你们的库编写了一个函数,可以将任意长度的字符串保存到全局变量 中。我并不完全理解,所以我肯定没有百分之百地使用它。
有没有更有效的使用方法?
有没有更有效的使用方法?
看看这个选项。
对全局变量使用CONTAINER<double> 也很方便。
查看此选项。
对全局变量使用CONTAINER<double> 也很方便。
谢谢