加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP hex文件及bin文件读取

发布时间:2020-12-13 16:08:16 所属栏目:PHP教程 来源:网络整理
导读:背景:做物联网时经常会有软件上传这种操作,上传的软件包文件常见的是hex和bin这两种. 一 hex文件读取 ? 1 首先我们需要了解hex文件内容格式 (图及下面说明来自网络,侵权必删) :(冒号)每个Intel HEX?记录?都由冒?号开头?; LL?是?数?据?长?度域,?它?代表?记

背景:做物联网时经常会有软件上传这种操作,上传的软件包文件常见的是hex和bin这两种.

一 hex文件读取

?  1 首先我们需要了解hex文件内容格式

  

(图及下面说明来自网络,侵权必删)

  :(冒号)每个Intel HEX?记录?都由冒?号开头?;
  LL?是?数?据?长?度域,?它?代表?记录当?中?数?据字?节?(dd)?的?数量?;
  aaaa?是地址域,?它代表?记录当?中?数据的起始地址;
  TT是代表HEX?记录类?型的域?,?它?可能是以下?数?据?当?中的一?个:
    00 –?数?据?记录(Data Record
    01 – 文件结?束?记录(End of FileRecord
    02 – 扩展段地址?记录(ExtendedSegment Address Record

    03 – 开始段地址?记录(Start Segment Address Record)
    04 – 扩展?线?性地址?记录(Extended Linear Address Record)    

    05 – 开始线性地址?记录(Extended Segment Address Record)
  DD 是数?据域?,?它?代表一?个?字?节?的?数?据.?一?个记录?可以有?许?多?数?据字?节?.?记录当?中?数?据字?节?的?数?量必?须?和数?据?长?度域(ll)?中指定的?数字相符.
  CC 是校验?和域?,?它?表示?这个记录?的校?验?和.?校?验?和的?计?算是通?过将记录当?中所有十六?进?制?编码数?字?对?的?值相加,?以256?为?模?进?行以下?补?足.

  表示为:“:[1字节长度][2字节地址][1字节记录类型][n字节数据段][1字节校验和]?”

  所以我们Php取内容的时候,可以按照"循环遍历每一行,字符串长度小于9或者第八第九位为01的,直接break;否则判断第八第九位是否为00,是的话就取值,否则continue"

  2 代码实例

            if($handle = fopen($_FILES["soft_file"]["tmp_name"],"r")){ $content = str_replace(array("rn","r","n","t",‘ ‘),‘‘,fgets($handle)); $data = ‘‘; while ( strlen($content)  >= 9 && substr($content,7,2)!=‘01‘) { if(substr($content,2)==‘00‘){ $data .= substr($content,9,-2); } $content = str_replace(array("rn",fgets($handle)); } file_put_contents(".demo.v",$data); }else{ exit(‘上传失败‘); }

?

?

二 bin文件读取

??? 一般和嵌入式软件那边协调都是bin文件直接读取,届时将内容传给硬件设备即可 

 move_uploaded_file($_FILES["soft_file"]["tmp_name"],".demo.v")

?

三 设备下载软件包时简要说明

 (我们内部是16进制传输,各位按照自己的规则来做,这里做下参考)

??? 1当hex文件上传的时候,我们已经截取了字符串,所以只需要

?

 file_get_contents(".demo.v‘)

?

 2 ?当bin文件上传的时候,则需要转换下16进制

?

            $file_pointer = fopen(".demo.v‘,"rb"); $file_read = fread($file_pointer,filesize(".demo.v‘)); fclose($file_pointer); $data = bin2hex($file_read);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读