Php 从特定位置读取8字节 $filename='301.tdr'; $packetStream=数组( '缓冲区'=>'', '位置'=>'', “大小”=>“ ); $packetStream['buffer']=fopen($filename,'rb'); $packetStream['position']=0; $packetStream['size']=filesize($filename); 而($packetStream['position']
你好, 我想在文件的特定位置读取8字节。但我也希望以二进制读取并以二进制形式获得输出。因为,这个文件不是字符串等。它是一个二进制文件Php 从特定位置读取8字节 $filename='301.tdr'; $packetStream=数组( '缓冲区'=>'', '位置'=>'', “大小”=>“ ); $packetStream['buffer']=fopen($filename,'rb'); $packetStream['position']=0; $packetStream['size']=filesize($filename); 而($packetStream['position'],php,Php,你好, 我想在文件的特定位置读取8字节。但我也希望以二进制读取并以二进制形式获得输出。因为,这个文件不是字符串等。它是一个二进制文件 此代码不适用于我,它返回0。但是我期望5317..除了需要在decodeInt64函数开始时将$packetStream声明为global之外,如果文件包含字节并且要显示它们的数值,则需要使用fread读取它们,然后获取它们的ord。在本例中,我将返回一个数组 $filename = '301.tdr'; $packetStream = array( '
此代码不适用于我,它返回0。但是我期望5317..除了需要在
decodeInt64
函数开始时将$packetStream
声明为global
之外,如果文件包含字节并且要显示它们的数值,则需要使用fread
读取它们,然后获取它们的ord
。在本例中,我将返回一个数组
$filename = '301.tdr';
$packetStream = array(
'buffer' => '',
'position' => '',
'size' => ''
);
$packetStream['buffer'] = fopen($filename, 'rb');
$packetStream['position'] = 0;
$packetStream['size'] = filesize($filename);
while($packetStream['position'] < $packetStream['size']) {
$groupID = decodeInt64($packetStream['buffer'], $packetStream['position']);
echo $groupID;
break;
}
function decodeInt64($stream, $position) {
fseek($stream, $position);
$packetStream['position'] += 8;
return bindec(fgets($stream, 8));
}
函数decodeInt64($stream,$position){
全球$packetStream;
fseek($stream,$position);
$packetStream['position']+=8;
$bytes=fread($stream,8);
$toReturn=array();
对于($i=0;$i<8;$i++){
$toReturn[]=ord($bytes[$i]);
}
返回$toReturn;
}
Itsbreak
-ing在第一次迭代中。@LawrenceCherone我知道,我只想看到文件的前8个字节。它应该返回5317,但返回0。我不知道其他的结果。。因此,在获得第一个结果后我中断。如果您尝试使用fread
而不是fgets
?@FedericoklezCulloca,如果我使用fread
读取4096字节,它将返回字符串未知字符。我想问题就在这里,我想看到二进制1和0。你必须循环读取字节(按原样,不要触摸它们,即删除bindec
),然后用ord
打印(或其他)它们的值,一次一个
function decodeInt64($stream, $position) {
global $packetStream;
fseek($stream, $position);
$packetStream['position'] += 8;
$bytes = fread($stream, 8);
$toReturn = array();
for($i = 0; $i < 8; $i++) {
$toReturn[] = ord($bytes[$i]);
}
return $toReturn;
}