PHP将4字节二进制字符串解释为无符号大端整数

时间:2013-04-17 04:25:20

标签: php endianness

我正在尝试将二进制字符串解释为无符号大端整数,正如她在此处的说明:http://mimesniff.spec.whatwg.org/#matches-the-signature-for-mp4(第4点)

我不太确定我需要在这做什么,但这是我的尝试:

// ONE
$box_size   = substr( $sequence, 0, 4 );
$box_size   = pack( 'C*', $box_size[0], $box_size[1], $box_size[2], $box_size[3] );
$box_size   = unpack( 'N*', $box_size );

// TWO
$box_size   = substr( $sequence, 0, 4 );
$box_size   = array_map( 'ord', str_split( $box_size ) );

// THREE
$box_size   = substr( $sequence, 0, 4 );
$box_size   = bindec( $box_size );

// FOUR
$box_size   = substr( $sequence, 0, 4);
$box_size   = (int) $box_size;

我没有运气,老实说我不确定结果应该是什么..有谁理解这个?我想我可能会打包并打开包装。

1 个答案:

答案 0 :(得分:3)

我会继续发表评论作为答案然后......

解压缩将某些内容的“紧凑”位表示形式转换为本机类型,只需使用带有正确参数的unpack来表示要解包的位的类型。在你的情况下:

$unpacked = unpack('N', $unsignedBigEndianInteger);
$int = $unpacked[1];

这使PHP读取字节流,假设它代表一个无符号大端,并将其转换为PHP本机整数。

记住:

  • pack:“大型原生类型”→挤入字节表示
  • unpack:压缩字节表示→“大型原生类型”
相关问题