背景:做物联网时经常会有软件上传这种操作,上传的软件包文件常见的是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("\r\n", "\r", "\n", "\t", ' '), '', fgets($handle));
$data = '';
while ( strlen($content) >= 9 && substr($content, 7,2)!='01') {
if(substr($content, 7,2)=='00'){
$data .= substr($content,9,-2);
}
$content = str_replace(array("\r\n", "\r", "\n", "\t", ' '), '', 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文件读取的更多相关文章

  1. .hex文件和.bin文件的区别

    博客转之于:  http://mini.eastday.com/a/160627003502858.html HEX文件和BIN文件是我们经常碰到的2种文件格式.下面简单介绍一下这2种文件格式的区别: ...

  2. hex文件和bin文件区别

    HEX文件和BIN文件是我们经常碰到的2种文件格式.因为自己也是新手,所以一直对这两个文件懵懵懂懂,不甚了解,最近在做STM32单片机的IAP更新,其中要考虑HEX文件和BIN文件,所以需要学习下这两 ...

  3. ELF文件和BIN文件

    文件的内容:1. BIN文件是 raw binary 文件,这种文件只包含机器码.2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等. 所以ELF文件的体 ...

  4. 工作总结 1 sql写法 insert into select from 2 vs中 obj文件和bin文件 3 npoi 模板copy CopySheet 最好先全部Copy完后 再根据生成sheet写数据 4 sheet.CopyRow(rowsindex, rowsindex + x); 5 npoi 复制模板如果出现单元格显示问题

    我们可以从一个表中复制所有的列插入到另一个已存在的表中: INSERT INTO table2SELECT * FROM table1; 或者我们可以只复制希望的列插入到另一个已存在的表中: INSE ...

  5. Keil生成汇编文件、bin文件

    // 生成汇编文件:$K\ARM\ARMCC\bin\fromelf.exe --text -a -c --output=@L_asm.txt "!L" // 生成bin文件:$K ...

  6. Obj文件和Bin文件

    本文导读:在用visual studio 编程时,会看到项目文件中含有bin和obj这两个文件夹,那么这两个文件夹具体包含一些什么东西的,具体作用是什么? 一.Bin文件夹 1.用来保存项目生成后程序 ...

  7. 关于ELF文件和BIN文件

    ELF文件执行过程 ELF文件有操作系统的加载器loader执行,比如linux,windows,对于3803处理器是grmon的load命令. 加载器会读取ELF文件program header,比 ...

  8. HEX和BIN文件的区别

    以下的内容是从网上转载来的,原文地址:http://blog.csdn.net/zhangliang_571/article/details/8519469  在这里感谢原作者. 1,是在keil中编 ...

  9. Keil开发环境如何生成BIN文件

    为什么需要BIN文件呢? 有些烧录器只支持BIN文件. 进行OTA远程升级时,只能使用BIN文件. 使用JLink脚本文件进行一键烧录时,只支持BIN文件. BIN文件要比HEX和AXF文件小的多. ...

随机推荐

  1. 数据重塑图解—Pivot, Pivot-Table, Stack and Unstack

    Pivot pivot函数用于创建一个新的派生表,该函数有三个参数:index, columns和values.你需要在原始表中指定这三个参数所对定的列名,接下来pivot函数会创建一个新的表格,其中 ...

  2. nginx 与location语法详解

    Location语法优先级排列   匹配符 匹配规则 优先级 = 精确匹配 1 ^~ 以某个字符串开头 2 ~ 区分大小写的正则匹配 3 ~* 不区分大小写的正则匹配 4 !~ 区分大小写不匹配的正则 ...

  3. java 调用腾讯云短信api

    依赖: <!--腾讯短信依赖--> <dependency> <groupId>com.github.qcloudsms</groupId> <a ...

  4. linux工作常用命令

    修改文件后缀 如 将文件application.properties.sample改为application.properties,格式 mv  文件名称.{改前后缀,修改后的目标后缀} 定位到修改文 ...

  5. 设置Apache监听多个端口

    1.在配置文件httpd.conf中Listen多个端口 Listen localhost:8033    Listen localhost:8083 ....... 2.在配置文件夹下的extra文 ...

  6. 【java多线程】volatile 关键字

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  7. spark 笔记 16: BlockManager

    先看一下原理性的文章:http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ ,http://jerrys ...

  8. ad2014注册出现:注册 - 激活错误 (0015.111)

    将安装包内的(adlmact.dll & adlmact_libFNP.dll)这两个文件取出并覆盖即可.安装包内文件具体位置:在安装包内搜索“adlmact”出现的两个文件“adlmact_ ...

  9. PDS常用快捷键

    绿色在Layout和Router中共用 1.PDS常用快捷键:2019-07-28 17:06:07 快捷键 说明 备注 shiftt + 左键双击 布线状态下,进行过孔放置   ctrl + 左键双 ...

  10. 报错:Original error: Could not proxy command to remote server. Original error: Error: read ECONNRESET

    问题:Appium的android真机启动手机时,会遇到以下问题: An unknown server-side error occurred while processing the command ...