我在小端看到,LSB处于起始地址,而在Big endian中,MSB处于起始地址。所以我写了这样的代码。如果不是为什么?
void checkEndianess()
{
int i = 1;
char c = (char)i;
if(c)
cout<<"Little Endian"<<endl;
else
cout<<"Big Endian"<<endl;
}
答案 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