PHP 언어 소스:

<?php

// Filename: testHexView_02.php
//
//  Purpose:  Show Hexadecimal codes of the given binary file.
//
// Execute: php testHexView_02.php [filename]
//
// Date: 2013. 8. 5.

 

function toHex($c) {
    $s = "";
    $x1 = ($c & 0xF0) >> 4;
    $x2 = $c & 0x0F;
    if ($x1 < 10) {
        $s = $s . chr($x1 + ord('0'));
    } else {
        $s = $s . chr(($x1 - 10) + ord('A'));
    }
    if ($x2 < 10) {
        $s = $s . chr($x2 + ord('0'));
    } else {
        $s = $s . chr(($x2 - 10) + ord('A'));
    }
    return $s;
}

function toHex8($n) {
    $s = "";
    $x1 = ($n & 0xF0000000) >> 28;
    $x2 = ($n & 0xF000000) >> 24;
    $x3 = ($n & 0xF00000) >> 20;
    $x4 = ($n & 0xF0000) >> 16;
    $x5 = ($n & 0xF000) >> 12;
    $x6 = ($n & 0xF00) >> 8;
    $x7 = ($n & 0xF0) >> 4;
    $x8 = $n & 0x0F;
    if ($x1 < 10) {
        $s = $s . chr($x1 + ord('0'));
    } else {
        $s = $s . chr(($x1 - 10) + ord('A'));
    }
    if ($x2 < 10) {
        $s = $s . chr($x2 + ord('0'));
    } else {
        $s = $s . chr(($x2 - 10) + ord('A'));
    }
    if ($x3 < 10) {
        $s = $s . chr($x3 + ord('0'));
    } else {
        $s = $s . chr(($x3 - 10) + ord('A'));
    }
    if ($x4 < 10) {
        $s = $s . chr($x4 + ord('0'));
    } else {
        $s = $s . chr(($x4 - 10) + ord('A'));
    }
    $s = $s . " ";
    if ($x5 < 10) {
        $s = $s . chr($x5 + ord('0'));
    } else {
        $s = $s . chr(($x5 - 10) + ord('A'));
    }
    if ($x6 < 10) {
        $s = $s . chr($x6 + ord('0'));
    } else {
        $s = $s . chr(($x6 - 10) + ord('A'));
    }
    if ($x7 < 10) {
        $s = $s . chr($x7 + ord('0'));
    } else {
        $s = $s . chr(($x7 - 10) + ord('A'));
    }
    if ($x8 < 10) {
        $s = $s . chr($x8 + ord('0'));
    } else {
        $s = $s . chr(($x8 - 10) + ord('A'));
    }
    return $s;
}


// Begin from here

if ($argc < 2) {
    printf("Usage: php testHexView_02.php [filename]\n");
    exit( 1 );
}

$fname = $argv[1];

if (! file_exists($fname)) {
    printf("The file \"%s\" does not exist.\n", $fname);
    exit( 1 );
}

if (is_dir($fname)) {
    printf("The path \"%s\" is a directory.\n", $fname);
    exit( 1 );
}

if (! is_readable($fname)) {
    printf("The file \"%s\" can not be read.\n", $fname);
    exit( 1 );
}

$handle = fopen($fname, "rb");
$fsize = filesize($fname);
$contents = fread($handle, $fsize);
fclose($handle);


printf("The size of the file \"%s\" is %d.\n", $fname, $fsize);
printf("\n");


$n = 0;
$t = "";

for($i = 0; $i < $fsize; $i++) {
    if ($n % 16 == 0) {
        printf("%s: ", toHex8($n));
    }
   
   $c = $contents[$i];
   $base10value = ord($c);


   printf(" %s", toHex($base10value));
   if ($base10value < ord(' ') or $base10value > 0x7F) {
       $t = $t . '.';
   } else {
       $t = $t . $c;
   }
   $n++;
    if ($n % 16 == 0) {
        printf("  |%s|\n", $t);
        $t = "";
    }
}

if ($t != "") {
    for($i = 0; $i < 16 - ($n % 16); $i++) {
        printf("   ");
    }
    printf("  |%s", $t);
    $t = "";
    for($i = 0; $i < 16 - ($n % 16); $i++) {
        printf(" ");
    }
    printf("|\n", $t);
}


printf("\nRead %d bytes.\n", $fsize);

?>

 

 

실행 예 1> php testHexView_02.php temp_1.bin
The size of the file "temp_1.bin" is 12.

0000 0000:  48 65 6C 6C 6F 20 74 68 65 72 65 0A              |Hello there.    |

Read 12 bytes.

 

실행 예 2> php testHexView_02.php myFile.ser
The size of the file "myFile.ser" is 130.

0000 0000:  AC ED 00 05 73 72 00 06 50 65 72 73 6F 6E 07 31  |....sr..Person.1|
0000 0010:  46 DB A5 1D 44 AB 02 00 03 49 00 03 61 67 65 4C  |F...D....I..ageL|
0000 0020:  00 09 66 69 72 73 74 4E 61 6D 65 74 00 12 4C 6A  |..firstNamet..Lj|
0000 0030:  61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B  |ava/lang/String;|
0000 0040:  4C 00 08 6C 61 73 74 4E 61 6D 65 71 00 7E 00 01  |L..lastNameq.~..|
0000 0050:  78 70 00 00 00 13 74 00 05 4A 61 6D 65 73 74 00  |xp....t..Jamest.|
0000 0060:  04 52 79 61 6E 73 71 00 7E 00 00 00 00 00 1E 74  |.Ryansq.~......t|
0000 0070:  00 07 4F 62 69 2D 77 61 6E 74 00 06 4B 65 6E 6F  |..Obi-want..Keno|
0000 0080:  62 69                                            |bi              |

Read 130 bytes.

 

 

Posted by Scripter

댓글을 달아 주세요