使用“ malloc”后的输出

时间:2019-12-02 10:31:26

标签: c

我写了以下代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *p=(int *)malloc(sizeof(int));
    *p=0x8F7E1A2B;
     printf("%x\n",*p);

     unsigned char *q=p;

     printf("%x\n",*q++);
     printf("%x\n",*q++);
     printf("%x\n",*q++);
     printf("%x\n",*q++);

    return 0;
}

代码输出如下所示:

8F7E1A2B
2B
1A
7E
8F

任何人都可以解释此代码的输出。 预先感谢。

1 个答案:

答案 0 :(得分:2)

我想您可能希望按Big Endian顺序获得字节,即8F-7E-1A-2B

这完全取决于体系结构的endianness:字节序是数字的二进制表示形式中字节的顺序。最常见的是:

  • Big Endian::最高有效字节位于最低地址,其后依次为其余字节。即8F-7E-1A-2B
  • 小尾数法:最低有效字节位于最低地址,然后其余字节按升序排列。即2B-1A-7E-8F。您的架构是小端的
  • 混合字节序:所有其他不属于大字节序或小字节序的字节配置都是可能的,并且它们属于混合字节序。即7E-8F-2B-1A1A-2B-8F-7E

旁注you shouldn't cast the result of malloc

int *p = (int *)malloc(sizeof(int)); // nope

int *p = malloc(sizeof(int));        // yep