endianowość architektury na której kompilujesz kod

endianowość architektury na której kompilujesz kod
FV
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 97
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ł:

Kopiuj
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:

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

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

Kopiuj
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ś

rajszym
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 62
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.