要使用php來解析二進位圖片,把他顯示成十六進位格式。
先看輸出
最左邊是位置,從0開始;中間是資料內容(16進位);右邊是對應的字元,不能顯示的字元用.或?表示

以下略,先不管此圖片的架構[1],單純的把二進位檔給讀出來。
<?php
$filesize = filesize('sample.png');
$fp = fopen('sample.png', 'rb');
$binary = fread($fp, $filesize);
fclose($fp);
$unpacked = unpack(sprintf('C%d', $filesize), $binary);
$unpacked = array_values($unpacked);
$ii=0;
$out= "";
$txt= "";
foreach($unpacked as $v){
if($ii%30==0){
print $out. " " . $txt ."\n" . sprintf("%04d| ", $ii );
$out= "";
$txt= "";
}
$out .= sprintf("%02X ", $v );
if($v >=32)$txt .= chr($v);
else $txt .= ".";
$ii++;
}
print $out;
print "\n";
第3~6行 用rb讀檔,把內容存入 $binary變數
第8行 用unpack方式解析, C%d 是用成無正負號數字格式,此部分是參考[2]的解法
第9行 把陣列索引清掉
第21行 把數字轉成16進位大寫 [3]
第22~23行 如果該數字>=32 ,就顯示該數字,否則用'.'來替代
如此就可以了。
參考資料
[1] 詳解png文件結構(不確定是否為原作) https://www.cnblogs.com/ECJTUACM-873284962/p/8986391.html
[2] https://stackoverflow.com/questions/38859621/reading-binary-files-in-php
[2] https://stackoverflow.com/questions/37094445/padding-zero-for-hexadecimal-number-in-php
