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

  • Best Quality Cartoons

    Best Quality

    10 ŞUBAT 2014
  • FASHTAG

    FASHTAG

    5 EYLÜL 2012
  • HTC Tutorials

    HTC Tutorial

    21 EYLÜL 2010