#include <cstdio>
#include <cstring>
#include <arpa/inet.h>

template<typename T>
void little_endian_hex(T val) {
    // Note that this works on both little-endian and big-endian
    // machines.
    char hexits[] = "0123456789ABCDEF"; // HEXadecimal digITS
    size_t num_hexits = sizeof(val) * 2;
    for (size_t i = 0; i < num_hexits; ++i) {
        printf("%c", hexits[val & 0xF]);
        val >>= 4;
    }
    printf(" ");
}

template<typename T>
void display_bytes(const T &val) {
    char bytes[sizeof(T)];
    memcpy(bytes, &val, sizeof(T));
    for (auto byte : bytes) {
        little_endian_hex(byte);
    }
    printf("\n");
}

int main() {
    int value = 0x12345678;
    little_endian_hex(value);
    printf("\n");
    printf("Little endian:\n");
    display_bytes(value);
    printf("Big endian:\n");
    display_bytes(htonl(value));
}
