Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
big-endian硬件上整数的PHP字节序列_Php - Fatal编程技术网

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”,这基本上是我记忆中的大端。首先,我没有大端机器来测试它。 根据

如果我在“big-endian”机器上运行这个PHP代码,我会得到什么

$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