Reputation: 39395
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.
Upvotes: 4
Views: 6861
Reputation: 28124
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.
Upvotes: 0
Reputation: 23218
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");
Upvotes: 1
Reputation: 17047
fwrite()
takes strings. Try chr(0x63)
if you want to write a 0x63
byte to the file.
Upvotes: 9
Reputation: 176665
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.)
Upvotes: 4