Что будет результатом следующего кода с прямым порядком байтов?

0

По-видимому, 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* то он зависит от контенты, но что такое случай с массивами или любым другим типом, который вы пытаетесь переосмыслить?

http://ideone.com/4UP0J0

  • 0
    Это нарушает строгое правило псевдонимов, не так ли?
Теги:
casting
endianness

1 ответ

2
Лучший ответ

Endian - это особенность процессора, а не компилятора...

Предполагая, что ваш short тип, если 16 бит, а unsigned chars - 8 бит, тогда макет памяти a будет

0x00 0x01

В бит-бит центрального процессора это означает, что *s будет 1 (0x0001). На маленьком endian CPU *s будет 256 (0x0100).

В стороне, не так-то просто найти большие процессоры endian больше. На этой странице есть список архитектур процессора за последние несколько десятилетий и перечислены суждения каждого из них.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню