Parent directory
endian-demo.c
#include <stdio.h>
#include <assert.h>
#include <arpa/inet.h>
int main(int argc, char **argv)
{
if (argc == 1) { // Write an int as host byte order and network byte order
const char *HOST_FILE = "endian-demo.host";
const char *NET_FILE = "endian-demo.net";
unsigned int num_host;
unsigned int num_net;
printf("Enter a hexadecimal integer: ");
scanf("%x", &num_host);
printf("The hex number 0x%.8x is %d in decimal\n", num_host, num_host);
FILE *f = fopen(HOST_FILE, "wb");
assert(f);
fwrite(&num_host, sizeof(num_host), 1, f);
printf("Wrote num_host to %s\n", HOST_FILE);
fclose(f);
num_net = htonl(num_host);
f = fopen(NET_FILE, "wb");
assert(f);
fwrite(&num_net, sizeof(num_net), 1, f);
printf("Wrote num_net to %s\n", NET_FILE);
fclose(f);
printf("You can \"xxd <filename>\" to see the content of a file\n");
} else { // Read an int from a file
FILE *f = fopen(argv[1], "rb");
assert(f);
unsigned int n;
fread(&n, sizeof(n), 1, f);
printf("Read int from %s: 0x%.8x (or %d)\n", argv[1], n, n);
printf("Logically: (Most Significant Byte) "
"%.2x %.2x %.2x %.2x (Least Significant Byte)\n",
(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff);
unsigned char *p = (unsigned char *)&n;
printf("Physically in memory: (First Byte) "
"%.2x %.2x %.2x %.2x (Last Byte)\n",
p[0], p[1], p[2], p[3]);
}
}