PHP hex文件及bin文件读取
背景:做物联网时经常会有软件上传这种操作,上传的软件包文件常见的是hex和bin这两种. 一 hex文件读取 ? 1 首先我们需要了解hex文件内容格式
:(冒号)每个Intel HEX?记录?都由冒?号开头?; 03 – 开始段地址?记录(Start Segment Address Record) 05 – 开始线性地址?记录(Extended Segment Address Record) 表示为:“:[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);
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |