#include <stdio.h>
#include <stdint.h>
uint32_t convert_endian(uint32_t value) {
// Write logic to swap bytes
return ((value >> 24) & 0x000000FF) |
((value >> 8) & 0x0000FF00) |
((value << 8) & 0x00FF0000)|
((value << 24) & 0xFF000000);
}
int main() {
uint32_t val;
scanf("%u", &val);
printf("%u", convert_endian(val));
return 0;
}Let’s say you have a 32-bit value stored in little-endian format:
uint32_t val = 0x12345678;
In memory (little-endian):
Byte[0] = 0x78
Byte[1] = 0x56
Byte[2] = 0x34
Byte[3] = 0x12
To convert to big-endian, you want:
Byte[0] = 0x12
Byte[1] = 0x34
Byte[2] = 0x56
Byte[3] = 0x78
byte0 = (val >> 24) & 0xFFbyte1 = (val >> 16) & 0xFFbyte2 = (val >> 8) & 0xFFbyte3 = val & 0xFFReassemble in reversed order:
big_endian_val = (byte3 << 24) |
(byte2 << 16) |
(byte1 << 8) |
(byte0);
uint32_t little_to_big_endian(uint32_t val) {
return ((val >> 24) & 0x000000FF) |
((val >> 8) & 0x0000FF00) |
((val << 8) & 0x00FF0000) |
((val << 24) & 0xFF000000);
}
Input: 0x12345678
Output: 0x78563412 (big-endian representation)
Input
305419896
Expected Output
2018915346