Question

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.

Was it helpful?

Solution

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

OTHER TIPS

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.)

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");

If you really want to write binary to files, I would advise to use the pack() approach together with the file API.

See this question for an example.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top