135 lines
4.1 KiB
Markdown
135 lines
4.1 KiB
Markdown
# MathSwap
|
||
|
||
Change the order of bytes in the [ushort](/en/docs/basis/types/integer/integertypes) type value.
|
||
|
||
```
|
||
ushort MathSwap(
|
||
ushort value // value
|
||
);
|
||
|
||
```
|
||
|
||
Parameters
|
||
|
||
value
|
||
|
||
[in] Value for changing the order of bytes.
|
||
|
||
Return Value
|
||
|
||
ushort value with the reverse byte order.
|
||
|
||
# MathSwap
|
||
|
||
Change the order of bytes in the [uint](/en/docs/basis/types/integer/integertypes) type value.
|
||
|
||
```
|
||
uint MathSwap(
|
||
uint value // value
|
||
);
|
||
|
||
```
|
||
|
||
Parameters
|
||
|
||
value
|
||
|
||
[in] Value for changing the order of bytes.
|
||
|
||
Return Value
|
||
|
||
uint value with the reverse byte order.
|
||
|
||
# MathSwap
|
||
|
||
Change the order of bytes in the [ulong](/en/docs/basis/types/integer/integertypes) type value.
|
||
|
||
```
|
||
ulong MathSwap(
|
||
ulong value // value
|
||
);
|
||
|
||
```
|
||
|
||
Parameters
|
||
|
||
value
|
||
|
||
[in] Value for changing the order of bytes.
|
||
|
||
Return Value
|
||
|
||
ulong value with the reverse byte order.
|
||
|
||
Example:
|
||
|
||
```
|
||
#property script_show_inputs
|
||
|
||
input ulong InpLongValue = 1; // Enter any ulong value here
|
||
input uint InpIntValue = 2; // Enter any uint value here
|
||
input ushort InpShortValue = 3; // Enter any ushort value here
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| Script program start function |
|
||
//+------------------------------------------------------------------+
|
||
void OnStart()
|
||
{
|
||
|
||
//--- print the values entered and converted by MathSwap() in decimal and binary representation in the journal
|
||
Print(ValueDescription(InpLongValue));
|
||
Print(ValueDescription(InpIntValue));
|
||
Print(ValueDescription(InpShortValue));
|
||
/*
|
||
result:
|
||
ulong value: 1
|
||
ulong value: 72057594037927936 using MathSwap()
|
||
binary ulong value: 0000000000000000000000000000000000000000000000000000000000000001
|
||
binary ulong value: 0000000100000000000000000000000000000000000000000000000000000000 using MathSwap()
|
||
|
||
uint value: 2
|
||
uint value: 33554432 using MathSwap()
|
||
binary uint value: 00000000000000000000000000000010
|
||
binary uint value: 00000010000000000000000000000000 using MathSwap()
|
||
|
||
ushort value: 3
|
||
ushort value: 768 using MathSwap()
|
||
binary ushort value: 0000000000000011
|
||
binary ushort value: 0000001100000000 using MathSwap()
|
||
*/
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
//| Return the text describing the variable values |
|
||
//+------------------------------------------------------------------+
|
||
template <typename T>
|
||
string ValueDescription(T x)
|
||
{
|
||
int num_bits = sizeof(T)*8;
|
||
string type_name = typename(T);
|
||
string bin_x = NumberToBinaryString(x);
|
||
string bin_swap_x = NumberToBinaryString(MathSwap(x));
|
||
return(StringFormat("%s value: %lld\n%s value: %lld using MathSwap()\nbinary %s value: %0*s\nbinary %s value: %0*s using MathSwap()\n",
|
||
type_name, x, type_name, MathSwap(x), type_name, num_bits, bin_x, type_name, num_bits, bin_swap_x));
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
//| Return the binary representation of a number as a string |
|
||
//+------------------------------------------------------------------+
|
||
template <typename T>
|
||
string NumberToBinaryString(T x)
|
||
{
|
||
string res = "";
|
||
int i = -1;
|
||
uchar size = sizeof(T)*8-1;
|
||
ulong mask = (ulong)1<<size;
|
||
while(!((x<<++i)& mask));
|
||
for(; i <=size; i++)
|
||
res += !((x<<i)& mask) ? "0" : "1";
|
||
return res;
|
||
}
|
||
|
||
```
|
||
|
||
See also
|
||
|
||
[Network functions](/en/docs/network), [SocketRead](/en/docs/network/socketread), [SocketSend](/en/docs/network/socketsend), [SocketTlsRead](/en/docs/network/sockettlsread), [SocketTlsReadAvailable](/en/docs/network/sockettlsreadavailable), [SocketTlsSend](/en/docs/network/sockettlssend)
|