当我阅读有关大端/小端的文章时,我很困惑。

代码如下:

#include <iostream>
using namespace std;

int i = 12345678;

int main()
{
    char *p = (char*)&i;  //line-1

    if(*p == 78)  //line-2
        cout << "little endian" << endl;
    if(*p == 12)
        cout << "big endian" << endl;

}

问题:
  • 在第1行中,我可以使用static_cast<char*>(&i)进行转换吗?
  • 在第2行中,根据代码,如果它是little-endian,则78存储在最低字节中,否则12存储在最低字节中。但是我认为,i = 12345678;将以二进制形式存储在内存中。

    如果是little-endian,那么i二进制文件的最后一个字节将存储在最低字节中,但是我不明白是如何保证i的最后一个字节为78

    就像,如果是i = 123;,那么i的二进制文件是01111011,是否可以保证在小尾数法中,23存储在最低字节中?
  • 最佳答案

  • 我更喜欢 reinterpret_cast
  • Little-endian和big-endian是指字节(即8位数量)在内存中的存储方式,而不是两位十进制数。如果i的值为0x12345678,那么您可以检查0x780x12以确定字节序,因为两个十六进制数字对应一个字节(在我为之编程的所有硬件上)。
  • 09-10 05:30
    查看更多