开发者

PHP Problem reading the hex values between these addresses?

<?php
$file = 'file.dat';
$file_contents = file_get_contents($file);
for ($i = 0x000481; $i <= 0x00048B; $i++) {
print $i;
}
?>

I am creating an online file analyzer but I have a small problem. It outputs (which is the actual position the hex is in)

1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163

when it should be

44 72 48 79 64 72 61 6C 69 73 6B

which his hex for DrHydralisk (me). Can anyone help me output the latter or just have it strait output ASCII (but hex is fine, I can just convert it)?

edit

Here is an image of what I am trying to do that I thi开发者_如何学JAVAnk will help.

http://imgur.com/nwenA.png

Here is the file I am trying to read, its a Starcraft replay (file.SC2Replay). Just search for DrHydralisk in a hex editor and that is where I am trying to read from.

http://www.mediafire.com/?6w8wi35q3o6ix8q


It should be (if clear text is in the file):

for( $i=0x481; $i<0x48D; $i++ ) {
   printf("%X ", ord($file_contents[$i]));
}

Note the loop boundaries: 0x481 .. 0x48D

Result:

44 72 20 48 79 64 72 61 6C 69 73 6B 

If the file contains hexadecimal numbers, this would be impossible because you need two bytes per hex char for the ascii character value range. So what is really in the file?


Edit

After reading your file, i did:

...

$file = 'file.SC2Replay';
$file_contents = file_get_contents($file);

for( $i=0x438; $i<0x443; $i++) {
   printf("%X ", ord($file_contents[$i]));
}
 for( $i=0x438; $i<0x443; $i++) {
   printf("%s ", $file_contents[$i]);
}

...

And it says:

72 48 79 64 72 61 6C 69 73 6B 

and

D r H y d r a l i s k 

You messed up the file position ;-)

Regards

rbo


EDIT:

Thanks for providing the file, helped a lot! Beleive I got it working too:

//Do binary safe file read
$filename = 'file.SC2Replay';
$file = fopen($filename, "rb");
$contents = fread($file, filesize($filename));
fclose($file);

//position 1080 - 1091
for ($i = 0x438; $i < 0x443; $i++)
    echo $contents[$i];

The reasons you were probably having problems is that first of all, a binary safe file read in php automatically replaces the bytes with the correct ASCII characters, so that threw off what position you actually needed to start reading from. Intead of 1153, it starts at 1080.


Could you explain how you are using the file you read in? Because the hex equivalent of:

11531154115511561157115811591160116111621163

is:

481 482 483 484 485 486 487 488 489 48a 48b

Also, there are two php functions you may find helpful

chr(int): returns the ascii character associated with the integer provided - http://php.net/manual/en/function.chr.php

dechex(int): returns the hex value of the integer provided - http://php.net/manual/en/function.dechex.php

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜