大端硬件上的整数PHP字节序列

时间:2015-04-20 08:37:27

标签: php

如果我要在“大端”机器上运行这个PHP代码,我会得到什么?

$v = 0x12345678;
for ($i = 0 ; $i < 4 ; $i++) {
    echo "$i: " . dechex(($v>>($i*8))&0xff) . "\n";
}

是“A”:

0: 78
1: 56
2: 34
3: 12

或者是“B”:

0: 12
1: 34
2: 56
3: 78

我问的是桌面计算机几乎总是小端,而且PHP总是在内部使用硬件的表示(其中一个最有问题的缺点)它仍然打印出“A”,它本质上是大端的记住。

1 个答案:

答案 0 :(得分:0)

首先,我没有Big endian机器来测试它。 Burt基于理论,如果我们布局$ v = 0x12345678;在记忆中 然后在littel endian中变成:

字节0:78 字节1:56 字节2:34 字节3:12

但是在大​​端,它变成了:

byte0:12 byte1:34 byte2:56 byte3:78

所以你应该在小端看到A,在大端看到B.

此外,如果你想模拟bigendian行为,你可以尝试htons函数,它将短数从主机架构转换为网络字节顺序,并且总是大端。