perl读取二进制格式的bin文件

2017-01-16 19:59:08来源:CSDN作者:u011729865人点击

  • perl下读取二进制格式的bin文件步骤
  • 16进制数据的字节翻转处理

工程中,板级系统通过IDE工具,dump出的数据格式是二进制的bin文件。
在linux下,直接cat命令,是乱码。
此时,如果有需求对该文件下的数据进行脚本处理;比如perl。可以参考下述方法。

perl下读取二进制格式的bin文件步骤:

  1. open FILEHAND,"XXX.bin"
    就是perl的读取文件命令
  2. binmode(FILEHAND)
    二进制模式
  3. read(FILEHAND,my $buf,2048)
    read命令一定要在binmode命令之后。
    $buf是存储2048个bytes数据的变量。此时直接print $buf,仍然是乱码格式。
    2048bytes,一般由bin文件的大小决定(例如当前应用,推荐与IDE dump的数据大小是一致的;)。
  4. my $hex=unpack("H*",$buf)
    这一行,主要是把bin文件里的内容,转成16进制数据。
    H*的意义,H是16进制解包,*是对所有字符进行16进制解包。详情参考下述文档。
    此时print $buf就是可查看的了。

16进制数据的字节翻转处理

因为硬件相关的dump数据显示,一般都是字节翻转的。
所以,可以使用perl的正则表达式,把1个字即8个字节,按照字节翻转的原理,推断出期望的数据显示格式。
perl下的命令:

s/([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/$4$3$2$1/n/g;

参考文档:
Perl的Open函数 (包括binmode)- 三句对白 - 博客园
http://www.cnblogs.com/charlexu/archive/2013/01/30/2882911.html
Perl函数pack/unpack解释 - eros的linux平台技术资料库 - 博客频道 - CSDN.NET
http://blog.csdn.net/eroswang/article/details/2032564

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台