0

我正在尝试将二进制字符串解释为无符号大端整数,正如她在此处的说明: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;

我没有运气,老实说,我什至不确定结果应该是什么。有没有人明白这一点?我想我可能在打包和解包方面走在正确的轨道上。

4

1 回答 1

3

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

要将某事物的“紧凑”位表示解压缩unpack为本机类型,只需使用正确的参数来表示您要解压缩的位的类型。在你的情况下:

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

这使得 PHP 读取字节流,假设它表示一个无符号的大端长整数,并将其转换为 PHP 原生整数。

记住:

  • pack: “大型原生类型” → 挤入字节表示
  • unpack:紧凑的字节表示→“大型本机类型”
于 2013-04-19T02:14:27.193 回答