如何在PHP中获取字节序类型?

6
在C#中,我可以通过以下代码片段获取字节序类型:
if(BitConverter.IsLittleEndian)
{
   // little-endian is used   
}
else
{
   // big-endian is used
}

如何在PHP中执行相同的操作?

检测字节序是针对什么的? - webbiedave
2
例如,当使用socket_send($socket, $data, $len)时,使用哪种字节序? - HomeCoder
$data 是一个8位二进制字符串,是一个 char 序列(就像所有的 PHP 字符串一样)。它没有字节序。如果您需要按特定字节序准备二进制数据,请使用 pack()unpack() 函数。 - Francis Avila
3
若想获取当前机器的字节序,可使用 pack() 函数并选择格式选项 lL,再输入一个常量进行求值以得出结果。 - Niko
2个回答

12

PHP的字符串类型是一个8位二进制字符串,是一个字符序列。它没有字节顺序。因此,在 PHP 中,字节顺序大多数情况下不是一个问题。

如果您需要以特定字节顺序准备二进制数据,请使用 pack()unpack() 函数。

如果您需要确定机器的本地字节顺序,则可以以相同的方式使用 pack()unpack()

function isLittleEndian() {
    $testint = 0x00FF;
    $p = pack('S', $testint);
    return $testint===current(unpack('v', $p));
}

1
感谢您的回答。那么,我在哪里可以找到返回false的机器? :-) - HomeCoder
2
一个 PowerPC 应该返回 false。如果你从未在 bigendian 机器上运行过,为什么要问这个问题呢? - Francis Avila
2
因为我不知道我的客户使用的机器是什么。 - HomeCoder

8
function isLittleEndian() {
    return unpack('S',"\x01\x00")[1] === 1;
}

小端系统将最不重要的字节存储在最小(最左侧)的地址中。因此,值1作为“短整型”(2字节整数)打包时应该将其值存储在左字节中,而大端系统将其存储在右字节中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接