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

Hom*_*der 6 php binary endianness php-5.3

在C#中,我可以通过以下代码片段获得字节序类型:

if(BitConverter.IsLittleEndian)
{
   // little-endian is used   
}
else
{
   // big-endian is used
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在PHP中做同样的事情?

Fra*_*ila 9

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

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

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

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

  • PowerPC 应该返回 false。如果您从未在 bigendian 机器上运行过,为什么要问这个问题? (2认同)
  • 因为我不知道我的客户到底使用什么机器。 (2认同)

mpe*_*pen 8

function isLittleEndian() {
    return unpack('S',"\x01\x00")[1] === 1;
}
Run Code Online (Sandbox Code Playgroud)

Little-endian系统将最低有效字节存储在最小(最左侧)地址中.因此1,打包为"短"(2字节整数)的值应将其值存储在左侧字节中,而大端系统将其存储在右侧字节中.