По-видимому, Ideone и Codepad используют Little endian для компиляции и запуска своего кода.
Если, например, я хочу протестировать следующее на процессоре Big endian, то мне любопытно узнать, действительно ли литье unsigned char[]
в unsigned short*
действительно меняет свой результат?
#include <iostream>
int main()
{
unsigned char a[2] = {0, 1};
unsigned short *s = (unsigned short*)a;
std::cout << *s;
}
Насколько я знаю, если вы передаете int
в char*
то он зависит от контенты, но что такое случай с массивами или любым другим типом, который вы пытаетесь переосмыслить?
Endian - это особенность процессора, а не компилятора...
Предполагая, что ваш short
тип, если 16 бит, а unsigned chars - 8 бит, тогда макет памяти a
будет
0x00 0x01
В бит-бит центрального процессора это означает, что *s
будет 1 (0x0001). На маленьком endian CPU *s
будет 256 (0x0100).
В стороне, не так-то просто найти большие процессоры endian больше. На этой странице есть список архитектур процессора за последние несколько десятилетий и перечислены суждения каждого из них.