Итак, я увидел несколько примеров того, как можно было узнать, какая архитектура может быть найдена. Пусть говорят, что у нас есть целочисленный указатель, который указывает на тип данных int. И пусть говорят, что значение int равно 0x010A0B12. В архитектуре с небольшим количеством символов наименее значимый байт, т.е. 12, будет сохранен в наименьшем адресе памяти, правильно? Таким образом, младший байт в 4-байтовом целой будет 12.
Теперь, на проверку. Если мы объявляем указатель char p и набираем целочисленный указатель на char * и сохраняем его в p и печатаем разыменованное значение p, мы получим ключ к контенту архитектуры. Если это 12, мы немного судим; 01 означает большой эндиан. Это звучит очень аккуратно...
int a = 0x010A0B12;
int *i = &a;
char *p = (char*)i;
printf("%d",*p); // prints the decimal equivalent of 12h!
Несколько вопросов здесь, действительно. Поскольку указатели строго типизированы, не должен ли указатель символа строго указывать на тип данных char? И что с печатью с% d? Разве мы не должны печатать с% c, для символа?