AVEVA RVM Binary Parse

昨天,Shing Liu要求我帮忙写一个对Aveva Rvm 二进制格式的解析程序。我粗看了下格式还是比较简单的,没有涉及到压缩、加密。下面给出简要分析过程,希望对有需要的朋友有所帮助。这是我第一次写blog,写的不到之处请谅解。

为了便于后面查看,我先在此放出Text与Binary的对照图:

1. 基本格式

基本格式是以节的方式存储,节与节之间紧密相邻。每一节包含节名称(Section Name)、下一个节地址(Next Section Addr)、节内容(Section Content),如下表所示。

Section Name Next Section Addr Section Content Section Name Next Section Addr Section Content ......
16 bytes 4bytes N bytes 16 bytes 4bytes N bytes ......

节与节之际的关系请注意红色箭头(^ ^)

2. 详细分析

2.1 Section Name

所占大小为16字节,如下图所示,左边为十六进制,右边为相应的ASCII编码。

可以看出名称与Rvm Text版本的”HEAD”基本一致,只是其中用了几个0填充了下,当然,这也便于我们区分文件是二进格式的还是文本格式的。

2.2 Next Section Addr

所占大小为4字节(以大端法表示),如下图,其中C4就是下一节开始的地址。

我们可以看一下C4处的内容,如下图,可以看出下一节的名称就是Text中对应的”MODL”。

2.3 Section Content

所占的字节视实际情况而定。

所有节的内容起始的八个字节均为00 00 00 01 00 00 00 01,猜测是用于表明这是一个节,且便于调试等。

类型主要有以下几种

1)字符串

可以看出00000014表示后续字符串大小(4字节为一个单位),所以,这里表示后面紧跟80字节的字符串。

2)整型

整型出现的地方主要包括Next Section Addr、字符串长度、几何信息等等。且都是以大端法表示的。

3)浮点数

浮点数也是以大端法形式表现的,如下图。在intel的cpu上需要位操作处理下。当然,也可以使用ntohl。

3. 解析结果

此解析算法在RvmTranslator程序中实现,经验证有效。转换结果见下图:

 

程序的使用及下载见:http://www.cppblog.com/eryar/archive/2015/04/22/210424.html

时间: 2024-11-06 23:53:59

AVEVA RVM Binary Parse的相关文章

AVEVA RVM to 3D PDF

AVEVA RVM to 3D PDF [email protected] RvmTranslator 3D PDF plugin can convert PDMS RVM files to 3D PDF without requiring the installation of PDMS software. By selected the Design Explorer tree node allows user to choose the hierarchy data to 3D PDF.

eclipse+cygwin+cdt搭建c/c++开发环境

Cygwin 是一个用于 Windows 的类 UNIX shell 环境. 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性:以及 Bash shell 的改写版本和许多 UNIX 实用程序,它们提供大家熟悉的 UNIX 命令行界面.前一个组件是一个 Windows 动态链接库 (DLL).后一个组件是一组基于 Cygwin DLL 的程序,其中许多是用未经修改的 UNIX 源代码编译的.它们合在一起提供大家熟悉的 UNIX 环境. Eclipse CDT

AVEVA PDMS to 3ds Max - RvmTranslator6.0beta

AVEVA PDMS to 3ds Max - RvmTranslator6.0beta [email protected] RvmTranslato6.0 translate PDMS RVM to 3ds Max by MAXScript. The MAXScipt is like the PML of PDMS. MAXScript can be used as a high-level scene import utility for 3ds Max. By outputting MAX

[fastlane] [gem] [rvm] [ruby]

使用fastlane 实现快速持续的更新.在安装过程中 出现的一系列问题: 1.安装fastlane :sudo gem install fastlane -错误:ERROR: Failed to build gem native extension. #不要添加多个gem 源 #开始以为是gem 源的问题 #查看gem源 gem sources # 删除默认的gem源 gem sources --remove http://rubygems.org/ # 增加taobao作为gem源 gem

用rvm安装ruby错误

缺少对于的库文件 [[email protected] ~]# rvm install 2.0.0Searching for binary rubies, this might take some time.No binary rubies available for: redhat/6/i386/ruby-2.0.0-p451.Continuing with compilation. Please read 'rvm help mount' to get more information on

(转)rvm安装与常用命令

rvm是一个命令行工具,可以提供一个便捷的多版本ruby环境的管理和切换. https://rvm.io/ 如果你打算学习ruby/rails, rvm是必不可少的工具之一. 这里所有的命令都是再用户权限下操作的,任何命令最好都不要用sudo. rvm安装 $ curl -L get.rvm.io | bash -s stable $ source ~/.bashrc $ source ~/.bash_profile 修改 RVM 的 Ruby 安装源到国内的 淘宝镜像服务器,这样能提高安装速度

Install ruby via RVM

1. Install RVM and refer to https://rvm.io/ -- gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB -- \curl -sSL https://get.rvm.io | bash -s stable [[email protected] ~]$

04-树6 Complete Binary Search Tree (30 分)

04-树6 Complete Binary Search Tree (30 分) A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a

C#中Convert和parse的区别

Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.Que