PHP nasıl bir dize HexDump alabilirim?

3 Cevap php

Ben PHP5'ta kodlamaları araştırıyorum. Bir dize ham onaltılık dökümü almak için bazı yolu var mı? yani bir dize bayt (karakter değil) her bir onaltılık gösterimi?

3 Cevap

echo bin2hex($string);

veya:

for ($i = 0; $i < strlen($string); $i++) {
    echo dechex(ord($string[$i]));
}

Ikili protokoller ile çalışmak hata ayıklama için, ben bir daha geleneksel HEX dökümü gerekli, bu yüzden bu işlevi yazdı:

function hex_dump($data, $newline="\n")
{
  static $from = '';
  static $to = '';

  static $width = 16; # number of bytes per line

  static $pad = '.'; # padding for non-visible characters

  if ($from==='')
  {
    for ($i=0; $i<=0xFF; $i++)
    {
      $from .= chr($i);
      $to .= ($i >= 0x20 && $i <= 0x7E) ? chr($i) : $pad;
    }
  }

  $hex = str_split(bin2hex($data), $width*2);
  $chars = str_split(strtr($data, $from, $to), $width);

  $offset = 0;
  foreach ($hex as $i => $line)
  {
    echo sprintf('%6X',$offset).' : '.implode(' ', str_split($line,2)) . ' [' . $chars[$i] . ']' . $newline;
    $offset += $width;
  }
}

Bu gibi daha geleneksel bir HEX dökümü üretir:

hex_dump($data);

=>

 0 : 05 07 00 00 00 64 65 66 61 75 6c 74 40 00 00 00 [.....default@...]
10 : 31 42 38 43 39 44 30 34 46 34 33 36 31 33 38 33 [1B8C9D04F4361383]
20 : 46 34 36 32 32 46 33 39 32 46 44 38 43 33 42 30 [F4622F392FD8C3B0]
30 : 45 34 34 43 36 34 30 33 36 33 35 37 45 35 33 39 [E44C64036357E539]
40 : 43 43 38 44 35 31 34 42 44 36 39 39 46 30 31 34 [CC8D514BD699F014]

Görünür olmayan karakterler bir nokta ile değiştirilir unutmayın - sizin ihtiyaçlarınıza uygun çizgi ($ width) ve dolgu karakteri ($ pad) başına bayt sayısını değiştirebilirsiniz. Ben bir $ satır argüman dahil, böylece bir tarayıcıda çıkışını görüntülemek için gerekiyorsa "<br/>" geçebilir.

Bu yararlı :-) umut

Bir ikili protokol ayıklama sırasında ben de () bir HexDump gerekli. Ben kesinlikle yararlı bir ARMUT paket olarak benim çözüm yayınlamaya karar verdi. Ayrıca github de kodu göz atabilirsiniz.

ARMUT: http://www.metashock.de/pear

GitHub: http://www.github.com/metashock/Hexdump

Mindplays çözümü ek olarak bu son satır ve ek params screensize oluşturmayı destekler. Ayrıca paket cmdline üzerinde hexdumps için phphd adında bir php yürütülebilir içerir. Bu, Windows sistemleri üzerinde yararlı olabilir :)

@ Mindplay.dk: Teşekkürler strtr () için fikir. Benim eski girişimi daha hızlı hafif çıktı. O benim sürümlerine entegre. (A azalma için tamponu kullanılarak) ..

Have Fun!