请教个文件读取的问题

公共马甲0315 2023-10-31 09:50:27

有个老外的设备生成的数据文件,是二进制格式的。然后已经说明了文件的结构形式,现在我希望用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调用。但是这个方法感觉难度太大,不适合新手,请教下有没有好的建议,谢谢?

...全文
4209 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
骛曲玛黑 2023-10-31
  • 打赏
  • 举报
回复 2

使用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>";

// 继续处理数据段部分...


公共马甲0315 2023-11-02
  • 举报
回复
@骛曲玛黑 非常感谢!

20,358

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧