Memory 关于ARM处理器端性的混淆

Memory 关于ARM处理器端性的混淆,memory,arm,endianness,Memory,Arm,Endianness,我对手臂装置的末端很困惑。我正在测试的设备使用little endian 假设这里有一段代码可以交换数组中的元素: uint32_t* srcPtr = (uint32_t*)src->get(); uint8_t* dstPtr = dst->get(); dstPtr[0] = ((*srcPtr) >> 16) & 0xFF; dstPtr[1] = ((*srcPtr) >> 8) & 0xFF; dstPtr[2] = (*srcP

我对手臂装置的末端很困惑。我正在测试的设备使用little endian

假设这里有一段代码可以交换数组中的元素:

uint32_t* srcPtr = (uint32_t*)src->get();
uint8_t* dstPtr = dst->get();

dstPtr[0] = ((*srcPtr) >> 16) & 0xFF;
dstPtr[1] = ((*srcPtr) >> 8) & 0xFF;
dstPtr[2] = (*srcPtr) & 0xFF;
dstPtr[3] = ((*srcPtr) >> 24);
我的理解是,如果srcPtr包含{0,1,2,3},那么输出dstPtr应该是{1,2,3,0}

但是输出是dstPtr是{2,1,0,3}

这是否意味着srcPtr以这种方式读取3、2、1->0

有人能帮我吗?:)


这是因为小endian吗

所以在地址0x100处,我有值0x00、0x11、0x22、0x33。0x00位于0x100,0x11位于0x101,依此类推。如果用32位无符号指针指向地址0x100,则得到值0x33221100,对于ARM(little endian)为true,对于x86(little endian)为true,等等

现在如果我取0x33221100和(x>>16)&0xFF,我得到0x22。(x>>8)&0xFF是0x11,x&0xFF是0x00,(x>>24)&0xFF是0x33。{2,1,0,3}


你的困惑在哪里?是从0x00,0x11,0x22,0x33到0x33221100的转换吗?小尾端,最低有效字节优先,因此遇到的最低或第一个地址(0x100)具有最低有效字节(0x00,数字的低8位),依此类推0x101,下一个最低有效位8到15,0x102位16到23和0x103位24到31。对于32位值。

现在,在arm处理器上使用big-endian,这是令人困惑的,尤其是当一些是32位,而另一些是8位时。。。。