pointers-memory · beginner · ~15 min

Endianness byte-swapping via byte pointers

Convert between Little-Endian and Big-Endian integer byte representations using byte pointer walking.

Challenge

Network wire protocols transmit multi-byte integers in Big-Endian (network byte order), whereas modern CPU architectures (x86, ARM) represent integers in Little-Endian. Reversing byte order via byte pointer walking is a fundamental systems programming pattern.

Your Task

Implement:

uint32_t swap_endian32(uint32_t val);
uint16_t swap_endian16(uint16_t val);

Reverse the order of bytes in 32-bit and 16-bit unsigned integers using byte pointer indexing.

Example

swap_endian32(0x12345678); // returns 0x78563412
swap_endian16(0xABCD);     // returns 0xCDAB

Input format

val: 32-bit or 16-bit unsigned integer.

Output format

Returns byte-swapped integer value.

Constraints

C11 freestanding. Reorder bytes via pointer inspection or bitwise shifts.

Starter code

#include <stdint.h>

/* Reverse byte order of 32-bit integer */
uint32_t swap_endian32(uint32_t val) {
    (void)val;
    return 0;
}

/* Reverse byte order of 16-bit integer */
uint16_t swap_endian16(uint16_t val) {
    (void)val;
    return 0;
}

Common mistakes

Shifting signed char resulting in sign extension; byte order indexing confusion.

Edge cases to handle

Symmetric values (e.g. 0x00000000 or 0xFFFFFFFF) remain identical; high bytes zero.

Background lessons

Solve this exercise in the browser editor — compile and run against the test harness, no setup required.