Почему последовательность байтов поворачивается, когда я преобразую массив char в массив целых чисел? - PullRequest
0 голосов
/ 27 июня 2019

Например:

int main(int argc, char* argv[]){
    char a[4]={0,0,0,1};
    int *ia=(int *)a;
    printf("%d",ia[0]);
}

Он печатает 16777216, потому что это двоичный код 00000001 00000000 00000000 00000000.Почему это поворачивается?

1 Ответ

2 голосов
/ 27 июня 2019

Процессоры Intel x86, а также серии AMD64 / x86-64 используют формат little-endian. Значение младшего байта (LSB) находится по самому низкому адресу. Другие байты следуют в порядке возрастания значимости. Это похоже на чтение справа налево в шестнадцатеричном порядке.

порядок байтов в каждом значении меняется на младшие порядковые машины, как показано на рисунке ниже: enter image description here

Таким образом, когда вы пишете массив символов с возрастающим адресом памяти, вы пишете побайтно, что не зависит от порядкового номера машины, но когда вы пытаетесь прочитать все 4 байта как одно целочисленное значение, его читать задом наперед.

обратите внимание, что порядок значений в массиве не зависит от порядкового номера машины, а переупорядочивает только байты в пределах одного «многобайтового значения».

Подробнее на Википедия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...