big-endian硬件上整数的PHP字节序列
如果我在“big-endian”机器上运行这个PHP代码,我会得到什么big-endian硬件上整数的PHP字节序列,php,Php,如果我在“big-endian”机器上运行这个PHP代码,我会得到什么 $v = 0x12345678; for ($i = 0 ; $i < 4 ; $i++) { echo "$i: " . dechex(($v>>($i*8))&0xff) . "\n"; } 或者是“B”: 我问的是,虽然台式计算机几乎总是小端,PHP总是在内部使用硬件表示(这是它最有问题的缺点之一),但它仍然打印出“A”,这基本上是我记忆中的大端。首先,我没有大端机器来测试它。 根据
$v = 0x12345678;
for ($i = 0 ; $i < 4 ; $i++) {
echo "$i: " . dechex(($v>>($i*8))&0xff) . "\n";
}
或者是“B”:
我问的是,虽然台式计算机几乎总是小端,PHP总是在内部使用硬件表示(这是它最有问题的缺点之一),但它仍然打印出“A”,这基本上是我记忆中的大端。首先,我没有大端机器来测试它。 根据理论,如果我们布局$v=0x12345678;记忆中 然后在littel endian中,它变成: 字节0:78 字节1:56 字节2:34 字节3:12 但在big endian中,它变成: 字节0:12字节1:34字节2:56字节3:78 所以你应该看到A在小端上,B在大端上
此外,如果您想模拟bigendian行为,您可以尝试使用htons函数,该函数将主机体系结构中的短数字转换为网络字节顺序,并且始终是bigendian。我会得到什么?为什么不试试呢?也许他没有大端机和小端机?确切地说@Med我只有我的桌面,它是小端机。Google+上刚刚向我指出,代码应该总是传递第一个序列,因为$v>>($I*8)本质上就是除以数字($I*256),因此忽略了底层结构。htons不是一个PHP函数,PHP提供了一个名为pack的函数,可以实现同样的功能。但正如我在上面的评论中所提到的,我想我是在短路我自己的问题,因为我并不是在看记忆。不管底层架构如何,我提供的代码总是返回“A”,因为我基本上是除以256并屏蔽低字节。
0: 78
1: 56
2: 34
3: 12
0: 12
1: 34
2: 56
3: 78