Проверяет ли этот код порядок байтов? - PullRequest
3 голосов
/ 26 августа 2010

Я слышал в младшем порядке, младший бит находится в начальном адресе, а в старшем байте MSB - в начальном адресе.Так что я написал свой код, как это.Если нет, то почему?

void checkEndianess()
{

int i = 1;
char c = (char)i;

if(c)
        cout<<"Little Endian"<<endl;
else
    cout<<"Big Endian"<<endl;


}

Ответы [ 3 ]

11 голосов
/ 26 августа 2010

Нет, вы берете int и приводите его к типу char, который является концепцией высокого уровня (и, скорее всего, внутренне будет выполняться в регистрах). Это не имеет ничего общего с порядком байтов, который в основном относится к памяти.

Вы, наверное, ищете это:

int i = 1;
char c = *(char *) &i;

if (c) {
   cout << "Little endian" << endl;
} else {
   cout << "Big endian" << endl;
}
2 голосов
/ 26 августа 2010

(возможно, конечно ;-P) более чистый способ получить различные интерпретации одной и той же памяти - использовать объединение:

#include <iostream>

int main()
{
    union
    {
        int i;
        char c;
    } x;
    x.i = 1;
    std::cout << (int)x.c << '\n';
}

Кстати / есть больше вариантов порядка байтов, чем просто большие и маленькие. : -)

1 голос
/ 26 августа 2010

Попробуйте вместо этого:

int i = 1;
if (*(char *)&i)
    little endian
else
    big endian
...