20,358
社区成员
发帖
与我相关
我的任务
分享
有个老外的设备生成的数据文件,是二进制格式的。然后已经说明了文件的结构形式,现在我希望用PHP把它内容读出来并且在网页里面显示相关的数据,但是本人水平有限,只能读取数据段内容。
它的格式大致为
1 文件头部分--采用的是C++结构体,struct header{.....};结构体的数据类型是全部已知的。
2 数据段 --用的是整形数据。{channel 1 data section } {channel 2 data section}
我现在只会用字节数数数方式,把结构体头文件部分跨过去。比如结构体是120字节,数据是int 4字节,然后按照整型读取
$file = fopen($fname,'rb');
$len = filesize($fname);
$offset = 120;
$readlen = $len - $offset;
$headers = fread($file,$offset);
$content = fread($file,$readlen);
fclose($file);
$datasection = unpack('l*',$content);
$singlelen = count($datasection)/2;
//以下分别处理每个数组元素的数据
//...
--------------------------------------
如果希望把文件头当中的信息也解析出来,怎么处理?
我现在已知的方法是用C++文件解析的函数,封装为DLL,让PHP调用。但是这个方法感觉难度太大,不适合新手,请教下有没有好的建议,谢谢?
使用PHP的unpack函数:unpack函数可以用于解析二进制数据。你可以在PHP中定义一个与C++结构体相对应的格式字符串,并使用unpack函数解析文件头部分的数据。例如:
// 定义与C++结构体相对应的格式字符串
$headerFormat = "A4signature/lversion/sflags/ltimestamp"; // 根据结构体的字段类型和顺序定义格式字符串
$file = fopen($fname, 'rb');
$headerData = fread($file, $headerSize); // 读取文件头部分
$header = unpack($headerFormat, $headerData); // 解析文件头数据
// 访问解析后的文件头数据
echo "Signature: " . $header['signature'] . "<br>";
echo "Version: " . $header['version'] . "<br>";
echo "Flags: " . $header['flags'] . "<br>";
echo "Timestamp: " . $header['timestamp'] . "<br>";
// 继续处理数据段部分...