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.
'프로그래밍 > PHP' 카테고리의 다른 글
PHP 8 정식 릴리즈 출시 (2020년 11월 26일) (0) | 2020.12.03 |
---|---|
PHP 언어로 평방근, 입방근, n제곱근 구하는 함수를 구현하고 테스트하기 (0) | 2013.01.12 |
PHP 언어로 역삼각함수, 역쌍곡선함수 값을 구하는 예제 (0) | 2013.01.04 |