no your not missing anything... php tries hard to make type casting not necessary... it will usually figure out when it needs to use a string as a number, etc...
however with-out a code example... its hard to say what going on...
i can do this fine... so your code must be different than mine...
<?php
header('Content-type: text/plain');
/// absolute offset of X : data
$data = '5:000X000';
echo "Data to be read into file (first char is offset of where X should be): \n". $data ."\n\n";
$fp = fopen( './fseek.data', 'w+' );
fwrite( $fp, $data );
fclose( $fp );
$fp = fopen( './fseek.data', 'r' );
$offset = fread( $fp, 1 );
echo "Offset as read by fread() = (". gettype($offset) .") ". $offset ."\n";
fseek($fp,$offset,SEEK_SET);
$x = fread( $fp, 1 );
echo "Char as offset ($offset) = (". gettype($x) .") ". $x ."\n\n";
settype($offset,'integer');
echo "Offset after type conversion = (". gettype($offset) .") ". $offset ."\n";
fseek($fp,$offset,SEEK_SET);
$x = fread( $fp, 1 );
echo "Char as offset ($offset) = (". gettype($x) .") ". $x ."\n";
fclose( $fp );
?>