endianowość architektury na której kompilujesz kod

0

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ę?

1

Nie, będzie zależało.
Jak chcesz niezależności to zrób:

cout<<((x>>0)&0xFF)<<endl;
cout<<((x>>8)&0xFF)<<endl;
cout<<((x>>16)&0xFF)<<endl;
cout<<((x>>24)&0xFF)<<endl;

Ba wykona się to szybszej niż to co podałeś

4

@fvg: Zwróć uwagę na fakt, że podany cytat nie odnosi się do architektury maszyny, ale do konwencji przyjętej w transmisji danych.
Wobec tego pytanie:

fvg napisał(a):

Pytanie czysto teoretyczne, czy endianowość maszyny ma wpływ na to jak reprezentowana jest wartość np. na stosie?

ma się nijak do przytoczonego przez Ciebie cytatu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1