I write general purpose code on the board most of the time. My function is far from optimal for this purpose. The good news is you could have it swap two of anything. Whether it is a char being swapped with a char, or an array of 50 floats being swapped with another array of 50 floats.
Your int values won't necessarily translate across the way you are wanting.
If you do LOWFIXED20_12.full = MIDFIXED20_12.full instead of copying the fraction to the fraction and the integer to the integer you will end up with the bits that make up those numbers out of whack.
The integer part of LOWFIXED20_12 is 12bits unlike the MIDFIXED20_12 integer, which is 8 bits. So both the quantity that these numbers can store and the memory locations of them within the structure are physically different.