C/C++: Change position of bytes 1 and 2 with bytes 3 and 4 in a 32bit unsigned integer
The following function will produce a new 32bit value where bytes 1 and 2 were moved in place of bytes 3 and 4 and vice versa.
[download id=”3642″]
#include <stdio.h>
#include <stdlib.h>
const unsigned int move_bytes_1_2_after_4 (const unsigned int input) {
//We get the two leftmost bytes and move them to the positions of the two rightmost bytes.
const unsigned int first_two_bytes = (input >> 16) & 0x0000FFFF;
//We get the two rightmost bytes and move them to the positions of the two leftmost bytes.
const unsigned int last_two_bytes = (input << 16) & 0xFFFF0000;
//We combine the two temporary values together to produce the new 32bit value where bytes 1 and 2 were moved in place of bytes 3 and 4 and vice versa.
return (first_two_bytes | last_two_bytes);
}
int main(void) {
const unsigned int value = 0xABCD0123;
printf ("Original: 0x%08x\n", value);
const unsigned int modified = move_bytes_1_2_after_4(value);
printf ("Modified: 0x%08x\n", modified);
return EXIT_SUCCESS;
}
Executing the above code will produce the following output:
Original: 0xabcd0123 Modified: 0x0123abcd
[download id=”3642″]


