字符串数组16进制相互转换脚本测试

介绍: 字符串数组16进制相互转换脚本测试

原理: 字符串转16进制字符串,16进制字符串转为字节数组,然后再字节数组转字符串。

来自: 策汇在线: http://www.fxchs.com

点击下载程序与源码 文件大小:2.28 KB

必须读我.txt 策汇在线.url MQL4/ MQL4/Scripts/ MQL4/Scripts/HexArrayConvert.mq4

MQL4/Scripts/HexArrayConvert.mq4代码片段:

 //+------------------------------------------------------------------+ //| HexArrayConvert.mq4 | //| Copyright 2019, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "字符串数组16进制相互转换脚本测试 策汇在线 http://www.fxchs.com" #property link "https://www.fxchs.com" #property version "1.00" #property strict //////////////////////////////////////////////////////////////////////////////////////////////////////////// // // // // 介绍: 字符串数组16进制相互转换脚本测试 // // 原理: 字符串转16进制字符串,16进制字符串转为字节数组,然后再字节数组转字符串。 // // 来自: 策汇在线: http://www.fxchs.com // // // /////////////////////////////////////////////////////////////////////////////////////////////////////////// int start() { string original = "策汇在线测试脚本abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()"; Alert("原始字符串:",original); // 字节数组 uchar origArr[512], reversedArr[512]; // 将原始字符串转为字节数组 int arrayLen = StringToCharArray(original, origArr); // 将数组转了16进制 string hex = ArrayToHex(origArr, arrayLen); Alert("转16进制字符串:",hex); // 16进制转为字节数组 HexToArray(hex, reversedArr); // 字节数组转字符串 string reversed = CharArrayToString(reversedArr); Alert("16进制转字符串:",reversed); return(0); } // 数组转为16进制字符串 string ArrayToHex(uchar &arr[],int count=-1) { string res=""; //--- check if(count<0 || count>ArraySize(arr)) count=ArraySize(arr); //--- transform to HEX string for(int i=0; i<count; i++) { res+=StringFormat("%.2X",arr[i]); } //--- return(res); } // 16进制转字节数组 bool HexToArray(string str, uchar &arr[]) { int arrcount = ArraySize(arr); int strcount = StringLen(str); if (arrcount < strcount / 2) return false; int i=0, j=0; for (i=0; i<strcount; i+=2) { string sub = StringSubstr(str, i, 2); uchar tmpchr = HexToDecimal(StringSubstr(str, i, 1))*16 + HexToDecimal(StringSubstr(str, i+1, 1)); arr[j] = tmpchr; j++; } return true; } // 16进制字符转字节转换 uchar HexToDecimal(string hex) { // assumes hex is 1 character if (!StringCompare(hex, "0")) return 0; if (!StringCompare(hex, "1")) return 1; if (!StringCompare(hex, "2")) return 2; if (!StringCompare(hex, "3")) return 3; if (!StringCompare(hex, "4")) return 4; if (!StringCompare(hex, "5")) return 5; if (!StringCompare(hex, "6")) return 6; if (!StringCompare(hex, "7")) return 7; if (!StringCompare(hex, "8")) return 8; if (!StringCompare(hex, "9")) return 9; if (!StringCompare(hex, "A")) return 10; if (!StringCompare(hex, "B")) return 11; if (!StringCompare(hex, "C")) return 12; if (!StringCompare(hex, "D")) return 13; if (!StringCompare(hex, "E")) return 14; if (!StringCompare(hex, "F")) return 15; return 0; }