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

  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • Make:

    Make:

    23 Mart 2006
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010