Files
mql5-skills/skills/mql5/references/docs/08-math/0626-math-mathswap.md
T

135 lines
4.1 KiB
Markdown
Raw Normal View History

2026-06-23 21:47:51 +08:00
# 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)