本文主要是介绍perl读取二进制格式的bin文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- perl下读取二进制格式的bin文件步骤
- 16进制数据的字节翻转处理
工程中,板级系统通过IDE工具,dump出的数据格式是二进制的bin文件。
在linux下,直接cat命令,是乱码。
此时,如果有需求对该文件下的数据进行脚本处理;比如perl。可以参考下述方法。
perl下读取二进制格式的bin文件步骤:
open FILEHAND,"XXX.bin"
就是perl的读取文件命令binmode(FILEHAND)
二进制模式read(FILEHAND,my $buf,2048)
read命令一定要在binmode命令之后。
$buf
是存储2048个bytes数据的变量。此时直接print $buf
,仍然是乱码格式。
2048bytes,一般由bin文件的大小决定(例如当前应用,推荐与IDE dump的数据大小是一致的;)。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
这篇关于perl读取二进制格式的bin文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!