此代码是否检查字节顺序?

时间:2010-08-26 05:53:23

标签: c++ c endianness

我在小端看到,LSB处于起始地址,而在Big endian中,MSB处于起始地址。所以我写了这样的代码。如果不是为什么?

void checkEndianess()
{

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

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


}

3 个答案:

答案 0 :(得分:11)

不,您正在使用int并将其转换为char,这是一个高级概念(内部最有可能在寄存器中完成)。这与字节顺序无关,字节顺序主要与记忆有关。

你可能正在寻找这个:

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

if (c) {
   cout << "Little endian" << endl;
} else {
   cout << "Big endian" << endl;
}

答案 1 :(得分:2)

(可以说,当然;-P)更清晰地解释同一个记忆的方法是使用联合:

#include <iostream>

int main()
{
    union
    {
        int i;
        char c;
    } x;
    x.i = 1;
    std::cout << (int)x.c << '\n';
}
顺便说一下BTE /有更多的字节序变化而不仅仅是大而小。 : - )

答案 2 :(得分:1)

请改为尝试:

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