2011-03-22 68 views
0

有人可以幫助我將這些數據導入到PHP等效項:>4siiiiiiiiiiiii8x它在Python中用於struct.pack()。 這是我走到這一步:N14si13x8
它應該被返回:('P3TF', 272, 64, 6832, 6896, 1426, 8336, 312, 8656, 0, 8656, 0, 8656, 2924384)Python包數據到PHP包數據

PHP版本的結果:

array 
    'si13x81' => int 1345541190 
    'si13x82' => int 272 
    'si13x83' => int 64 
    'si13x84' => int 6832 
    'si13x85' => int 6896 
    'si13x86' => int 1426 
    'si13x87' => int 8336 
    'si13x88' => int 312 
    'si13x89' => int 8656 
    'si13x810' => int 0 
    'si13x811' => int 8656 
    'si13x812' => int 0 
    'si13x813' => int 8656 
    'si13x814' => int 2924384 

尚需獲得的第一個權利。

+0

你能否提供輸入數據(以base64爲單位)?這更像你想解包()'。 – mario 2011-03-22 17:23:30

+0

對不起,我正在試圖解壓。源文件是一個PS3主題文件.p3t例如:http://download.ps3-themes.com/downloads3/11518-MyFirstTheme.p3t 顯示的數據是fread直到指針64('fread($ f,64) ;')在二進制閱讀模式('fopen('file.p3t','rb')') – 2011-03-22 17:33:51

回答

1

我猜主要問題是is在PHP中有不同的含義。重新創建PHP你原來的名單,這似乎工作:

print_r(unpack("a4header/N13int/x8fill", $p)); 

給我:

Array(
    [header] => P3TF 
    [int1] => 272 
    [int2] => 64 
    [int3] => 6832 
    [int4] => 6896 
    [int5] => 1426 
    [int6] => 8336 
    [int7] => 312 
    [int8] => 8656 
    [int9] => 0 
    [int10] => 8656 
    [int11] => 0 
    [int12] => 8656 
    [int13] => 2924384 

我不那麼肯定了x8。這不是用於PHP中的填充。也許嘗試@,如果它不適用於真正的數據文件。

+0

謝謝你的工作。你介意解釋一下,這樣我可以理解它以備將來參考嗎?謝謝 – 2011-03-22 17:58:04

+0

我只是偶然發現了它。 Python中的''''是PHP中的''''。 'N'是Pythons'i'的一個明確的大端32位版本。 PHP語法使用'/'分隔符,並允許在每個說明符或量詞後附加數組鍵名。這是因爲PHP返回一個散列/數組。 – mario 2011-03-22 18:00:34

+0

夠公平的。謝謝(你的)信息 :) – 2011-03-22 19:09:45