PHP hex文件及bin文件读取

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP hex文件及bin文件读取脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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

一 hex文件读取

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

  

PHP hex文件及bin文件读取

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

  :(冒号)每个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("\r\n","\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("\r\n",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);

脚本宝典总结

以上是脚本宝典为你收集整理的PHP hex文件及bin文件读取全部内容,希望文章能够帮你解决PHP hex文件及bin文件读取所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。