Pytanie czysto teoretyczne, czy endianowość maszyny ma wpływ na to jak reprezentowana jest wartość np. na stosie?
powiedzmy mam int x = 0x77882211;
Czy niezależnie od endianowości maszyny zawsze będę miał:
char* y = &x;
std::cout << static_cast<unsigned> (*(ch))<< std::endl; //11
std::cout << static_cast<unsigned> (*(ch+1))<< std::endl; //22
std::cout << static_cast<unsigned> (*(ch+2)) << std::endl; //88
std::cout << static_cast<unsigned> (*(ch+3))<< std::endl; //77
Pytam bo jakiś gość coś takiego zaleca:
Let's say your data stream (for example from network) has a little-endian-encoded 32-bit integer. Here's how to extract it (assuming unsigned bytes):
i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);
If it's big-endian, here's how to extract it:
i = (data[3]<<0) | (data[2]<<8) | (data[1]<<16) | (data[0]<<24);
I zastanawiam się czemu coś takiego wystarcza a nie trzeba nic kombinować z ifdefami czy jesteś na maszynie LITTLE czy BIG endian. To już jest nie na moją głowę takie myślenie abstrakcyjne.
Bo to rozwiązanie które on zaleca na swoim blogu to sugeruje jakby programista gdy pisze kod to miał zakładać że dla nas w momencie pisania kodu zawsze obowiązuje LITTLE ENDIAN. Jeżeli tak to czy kompilatory są tak sprytne, że w momencie egzekucji programu na ekranie zobaczę też:
11
22
88
77
niezależnie od architektury na której kompilowałem kod i go wykonuję?