ARM处理器对字节序的困惑

时间:2017-04-04 00:56:56

标签: memory arm endianness

我很担心ARM设备上的字节序。我正在测试的设备使用小端。

说这里有代码交换数组中的元素:

first = Sequential()
first.add(Dense(1, input_shape=(2,), activation='sigmoid'))

second = Sequential()
second.add(Dense(1, input_shape=(1,), activation='sigmoid'))

result = Sequential()
merged = Concatenate([first, second])
ada_grad = Adagrad(lr=0.1, epsilon=1e-08, decay=0.0)
result.add(merged)
result.compile(optimizer=ada_grad, loss=_loss_tensor, metrics=['accuracy'])

我的理解是,如果srcPtr包含{0,1,2,3},则输出dstPtr应为{1,2,3,0}。

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

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

有人可以帮帮我吗? :)

这是由于小端吗?

1 个答案:

答案 0 :(得分:1)

所以在地址0x100处,我的值为0x00,0x11,0x22,0x33。 0x00位于0x100,0x11位于0x101,依此类推。如果我用32位无符号指针指向地址0x100,那么我得到值0x33221100,对于ARM(小端),为真,对于x86(小端)等为真。

所以现在如果我拿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位对于32位值,16至23和0x103位24至31.