Little vs Big Endianess: How to interpret the test
c, endianness
Solution
If we split into different parts:
`&x`: This gets the address of the location where the variable `x` is, i.e. `&x` is a pointer to `x`. The type is `int *`.
`(char *)&x`: This takes the address of `x` (which is a `int *`) and converts it to a `char *`.
`*(char *)&x`: This dereferences the `char *` pointed to by `&x`, i.e. gets the values stored in `x`.
Now if we go back to `x` and how the data is stored. On most machines, `x` is four bytes. Storing `1` in `x` sets the least significant bit to `1` and the rest to `0`. On a little-endian machine this is stored in memory as `0x01 0x00 0x00 0x00`, while on a big-endian machine it's stored as `0x00 0x00 0x00 0x01`.
What the expression does is get the first of those bytes and check if it's `1` or not.
Problem
So I'm writing a program to test the endianess of a machine and print it. I understand the difference between little and big endian, however, from what I've found online, I don't understand why these tests show the endianess of a machine. This is what I've found online. What does *(char *)&x mean and how does it equaling one prove that a machine is Little-Endian? ``` int x = 1; if (*(char *)&x == 1) { printf("Little-Endian\n"); } else { printf("Big-Endian\n"); } ```