2013-04-17 55 views
0

我試圖解釋一個二進制字符串作爲一個無符號的大端整數,作爲她的指示進行:http://mimesniff.spec.whatwg.org/#matches-the-signature-for-mp4(4點)PHP解釋一個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; 

我有沒有運氣,老老實實我不知道是什麼結果,甚至應該是..有誰明白這一點?我想我可能會在打包和解壓時走在正確的軌道上。

+0

僅有'解包( 'N' ,$ string)'應該做得很好。 – deceze

+0

哇......這很簡單。 pack和unpack之間的區別讓我感到困惑。但是這似乎有效。感謝欺騙! – Shane

回答

2

我會繼續和張貼作爲回答,然後評論...

解壓一個「緊湊型」位的東西表示成一個原生型,只需要使用unpack用正確的參數來表示您正在解包的位的類型。你的情況:

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

這使得PHP讀取字節流假定它代表了一個無符號大端長,將其轉換成PHP本地整數。

記住:

  • pack: 「大原生型」 →擠入字節表示
  • unpack:緊湊字節表示→ 「大原生型」
+0

對不起,不應該是$ unpacked [1]; ?感謝那個小尾註:) – Shane

+0

而且你是對的。 – deceze

相關問題