SORU
29 HAZİRAN 2009, PAZARTESİ


Nasıl PHP bir dize bir hex dökümü alabilir miyim?

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

CEVAP
19 Kasım 2010, Cuma


İkili protokoller ile hata ayıklama iş için, daha geleneksel bir HEX dökümü ihtiyacım vardı, bu fonksiyon yazdım:

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 daha geleneksel bir HEX dökümü, bu gibi ü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 süre - satır başına bayt sayısını değiştirebilirsiniz (dolar), genişlik ve dolgu karakteri ile değiştirilir unutmayın ($tampon) sizin ihtiyaçlarınıza uygun. Eğer bir tarayıcı çıktı görüntülemek istiyorsanız "<br/>" geçmesi $yeni satır bir değişken ekledim.

Bu yararlı olduğunu umuyoruz :-)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 1881 Animation

    1881 Animati

    5 EKİM 2013
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008