将 int 类型指针地址转换为 char 并打印它从右到左给出字符

问题描述

在使用 DMA 时,我遇到了以下代码,其结果对我来说有些出乎意料:

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

int main(){
    int *p=(int*)malloc(sizeof(int));
    
    *p=0x5E6A3D1B;
    
    unsigned char *q=(unsigned char*)p;
    
    printf("%X \n",*(q+1));
    return 0;
}

程序的结果是: 3D

当我只尝试打印 q+1 而不是打印 q 时,我得到:1B

显然在打印 q+3 时我得到了 6A

所以,我很困惑为什么我得到的输出是从右到左?

是不是因为它是从最低有效位(LSB)开始的? 如果是,那是什么原因

非常感谢

解决方法

这取决于内部整数值的存储方式。它们可以存储为大端或小端。那是从最高有效位开始还是从次要有效位开始。