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

  • Hot For Nutrition

    Hot For Nutr

    26 ŞUBAT 2007
  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • Tianna Sierra Dance

    Tianna Sierr

    16 EYLÜL 2013