首页 文章

c,big-endian系统中的十六进制表示

提问于
浏览
0

结果是什么:

int x = 0x00000001;
int y = 0x80000000;

在大端系统?

我的目标是定义一个具有第一个(内存中)位集的int,无论它是最重要的还是最不重要的 . 我知道,对于little-endian系统,x会满足这个要求,但在大端系统中它仍然是正确的吗?

我很确定以下内容适用于两个系统:

char c[4] = {0x80, 0, 0, 0};
int x = (int) c;

那是对的吗?有更优雅的方法吗?

(我没有大端系统可以试验)

2 回答

  • 1

    你可能想要的是这个:

    int x = 0;
    char* p = (char*)&x;
    p[0] = 0x01;
    

    上面的代码将 int 变量的最低地址字节中的最低有效位设置为1:

    • 在Big-Endian处理器上,它将MS字节中的LS位设置为1(即 x == 0x10000000 ) .

    • 在Little-Endian处理器上,它将LS字节中的LS位设置为1(即 x == 0x00000001 ) .


    话虽如此,你对"the first bit"的定义是什么?恕我直言,这是最不重要的一个,在这种情况下, int x = 0x00000001 是答案,无论处理器的Endianness如何!


    以下术语可能有助于您更好地理解:

    • 将最低有效位设置为8位字节:0x01

    • 设置8位字节中的最高有效位:0x80

    • 将最低有效字节设置为4字节整数:0x000000FF

    • 设置4字节整数中的最高有效字节:0xFF000000

    • 在LE处理器上设置4字节整数的最低地址字节:0x000000FF

    • 在BE处理器上设置4字节整数的最低地址字节:0xFF000000

    • 在LE处理器上设置4字节整数的最高地址字节:0xFF000000

    • 在BE处理器上设置4字节整数的最高地址字节:0x000000FF

  • 1

    你可以试试工会

    union foo
    {
      char array[8];
      int64_t num;
    };
    

相关问题