问题描述
在使用 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)开始的? 如果是,那是什么原因
非常感谢
解决方法
这取决于内部整数值的存储方式。它们可以存储为大端或小端。那是从最高有效位开始还是从次要有效位开始。