Initial Commit.
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
# StructToCharArray
|
||||
|
||||
Copy [POD structure](/en/docs/basis/types/classes#simple_structure) to uchar type array.
|
||||
|
||||
```
|
||||
bool StructToCharArray(
|
||||
const void& struct_object, // structure
|
||||
uchar& char_array[], // array
|
||||
uint start_pos=0 // starting position in the array
|
||||
);
|
||||
|
||||
```
|
||||
|
||||
Parameters
|
||||
|
||||
struct_object
|
||||
|
||||
[in] Reference to any type of [POD structure](/en/docs/basis/types/classes#simple_structure) (containing only simple data types).
|
||||
|
||||
char_array[]
|
||||
|
||||
[in] [uchar](/en/docs/basis/types/integer/integertypes) type array.
|
||||
|
||||
start_pos=0
|
||||
|
||||
[in] Position in the array, starting from which the copied data are added.
|
||||
|
||||
Return Value
|
||||
|
||||
Returns true if successful, otherwise false.
|
||||
|
||||
Note
|
||||
|
||||
When copying, the dynamic array automatically expands ([ArrayResize](/en/docs/array/arrayresize)) if there is not enough space. If the array cannot be expanded up to the required value, the function returns an error.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
uchar ExtCharArray[];
|
||||
MqlRates ExtRates[1];
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Script program start function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnStart()
|
||||
{
|
||||
//--- copy the data of one current bar into the MqlRates structure
|
||||
if(CopyRates(Symbol(), PERIOD_CURRENT, 0, 1, ExtRates)!=1)
|
||||
{
|
||||
Print("CopyRates() failed. Error code: ", GetLastError());
|
||||
return;
|
||||
}
|
||||
|
||||
//--- print the data received in the MqlRates structure in the journal
|
||||
Print("Data in the structure immediately after receiving it:");
|
||||
MqlRatesPrint(ExtRates[0]);
|
||||
|
||||
//--- copy the structure to the uchar type array
|
||||
ResetLastError();
|
||||
if(!StructToCharArray(ExtRates[0], ExtCharArray))
|
||||
{
|
||||
Print("StructToCharArray() failed. Error code: ", GetLastError());
|
||||
return;
|
||||
}
|
||||
|
||||
//--- clear the structure
|
||||
ZeroMemory(ExtRates[0]);
|
||||
//--- print the data in the structure after clearing
|
||||
Print("\nData in the structure after ZeroMemory():");
|
||||
MqlRatesPrint(ExtRates[0]);
|
||||
|
||||
//--- now copy the data from the uchar array to the MqlRates structure
|
||||
if(!CharArrayToStruct(ExtRates[0], ExtCharArray))
|
||||
{
|
||||
Print("CharArrayToStruct() failed. Error code: ", GetLastError());
|
||||
return;
|
||||
}
|
||||
//--- print the data in the MqlRates structure after copying it from the uchar array
|
||||
Print("\nData in the MqlRates structure after copying it from a uchar array:");
|
||||
MqlRatesPrint(ExtRates[0]);
|
||||
|
||||
/*
|
||||
result:
|
||||
|
||||
Data in the structure immediately after receiving it:
|
||||
MqlRates data:
|
||||
Time = 2024.02.21 07:00;
|
||||
Open = 1.08143;
|
||||
High = 1.08158;
|
||||
Low = 1.08122;
|
||||
Close = 1.08137;
|
||||
Tick volume = 1341;
|
||||
Spread = 4;
|
||||
Real volume = 0
|
||||
|
||||
Data in the structure after ZeroMemory():
|
||||
MqlRates data:
|
||||
Time = 0;
|
||||
Open = 0.00000;
|
||||
High = 0.00000;
|
||||
Low = 0.00000;
|
||||
Close = 0.00000;
|
||||
Tick volume = 0;
|
||||
Spread = 0;
|
||||
Real volume = 0
|
||||
|
||||
Data in the MqlRates structure after copying it from a uchar array:
|
||||
MqlRates data:
|
||||
Time = 2024.02.21 07:00;
|
||||
Open = 1.08143;
|
||||
High = 1.08158;
|
||||
Low = 1.08122;
|
||||
Close = 1.08137;
|
||||
Tick volume = 1341;
|
||||
Spread = 4;
|
||||
Real volume = 0
|
||||
*/
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Print the fields of the MqlRates structure in the journal |
|
||||
//+------------------------------------------------------------------+
|
||||
void MqlRatesPrint(MqlRates &rates)
|
||||
{
|
||||
//--- create the output string
|
||||
string text=StringFormat(" Time = %s;\n"
|
||||
" Open = %.*f;\n"
|
||||
" High = %.*f;\n"
|
||||
" Low = %.*f;\n"
|
||||
" Close = %.*f;\n"
|
||||
" Tick volume = %I64u;\n"
|
||||
" Spread = %d;\n"
|
||||
" Real volume = %I64u",
|
||||
TimeToString(rates.time),
|
||||
_Digits, rates.open,
|
||||
_Digits, rates.high,
|
||||
_Digits, rates.low,
|
||||
_Digits, rates.close,
|
||||
rates.tick_volume,
|
||||
rates.spread,
|
||||
rates.real_volume);
|
||||
//--- print the header and the output string in the journal
|
||||
Print("MqlRates data:\n", text);
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
See also
|
||||
|
||||
[StringToCharArray](/en/docs/convert/stringtochararray),[ ](/en/docs/constants/io_constants/codepageusage)[ShortArrayToString](/en/docs/convert/shortarraytostring),[CharArrayToStruct](/en/docs/convert/chararraytostruct), [Use of a Codepage](/en/docs/constants/io_constants/codepageusage), [FileWriteStruct](/en/docs/files/filewritestruct), [Unions (union)](/en/docs/basis/types/classes#union), [MathSwap](/en/docs/math/mathswap)
|
||||
Reference in New Issue
Block a user