tags:

views:

945

answers:

3

I want to write a raw byte/byte stream to a position in a file. This is what I have currently:


$fpr = fopen($out, 'r+');
fseek($fpr, 1); //seek to second byte
fwrite($fpr, 0x63); 
fclose($fpr);

This currently writes the actually string value of "99" starting at byte offset 1. IE, it writes bytes "9" and "9". I just want to write the actual one byte value 0x63 which happens to represent number 99.

Thanks for your time.

+2  A: 

fwrite() takes strings. Try chr(0x63) if you want to write a 0x63 byte to the file.

nsayer
+1  A: 

You are trying to pass an int to a function that accepts a string, so it's being converted to a string for you.

This will write what you want:

fwrite($fpr, "\x63");

Don Neufeld
+1  A: 

That's because fwrite() expects a string as its second argument. Try doing this instead:

fwrite($fpr, chr(0x63));

chr(0x63) returns a string with one character with ASCII value 0x63. (So it'll write the number 0x63 to the file.)

yjerem