基于PB BLOB数据类型实现的位操作

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:worbestczhy
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文利用PB BLOB可以操作二进制大对象的特点,借助PB内置函数对PB的位操作能力进行了函数封装,扩展了PB的位操作能力并给出了在图像处理和工业控制中的应用实例。
  关键词:PowerBuilder;二进制大对象;位操作;图像;工业控制
  中图分类号:TP311.56 文献标识码:A文章编号:1009-3044(2007)05-11195-03
  
  1 引言
  PB作为一个开发工具,一直是以开发数据库管理信息系统见长的。但在图像处理和工业控制软件开发过程中,由于都涉及到数据按位操作,PB就无能为力了(当然可借助其他语言进行扩展),因为PB不具备位处理能力。从PB 6.5一直到现在普遍使用的PB 9.0,一直没有提供有关位处理的相关函数。本文则借助和利用PB提供的某些函数的特殊属性,成功地对PB位处理函数进行了扩充并对其进行了函数封装,从而使PB具备了位处理能力。
  
  2 PB位操作所涉及的三个技术问题
  常见的位操作主要有五种:位检测操作、位与操作、位或操作、位非操作和位异或操作。但要在PB中实现这些功能,以下的三个技术问题必须解决。
  首先解决的是,PB中字节数据类型的存储问题。我们知道,PB本身不具备位处理能力,也没有提供字节这一数据类型。但是PB提供了BLOB这一数据类型,BLOB (Binary Large Object),中文称二进制大对象。与常见的数据类型不同,它是一种用于存储没有边界的数据。它的大小长度变化很大,在PB中,BLOB数据类型的长度可以从0个字节到4294967295个字节。BLOB数据类型具有特殊性,它可以包含一些特殊的控制字符,例如,0x00,在很多编程语言中该控制字符用于表示字符串的结束[1]。由于BLOB型变量的这些特点,使得BLOB数据类型可以处理无法用常规数据类型(例如字符型、数字型、逻辑型等)进行表示并加以处理的数据,诸如较长的备注,详细的说明,数字照片,图像,声音,视频流等特殊的数据类型[2]。而且BLOB数据类型是可以按字节进行分割的。这样就解决了PB中字节数据类型的存储问题。
  其次,所要解决的是整型数据(0-255)和BLOB数据类型的相互转换问题。在许多高级语言中,字节类型是一种整形,其范围是从0到255。在PB中,使用char()函数可以将一个整型数据(0-255之间)转换为ASCII字符,然后通过blob()函数可以将字符(实际上是借助字符串实现的)转换成BLOB类型;反之,通过string()函数也可以将BLOB型数据转换为字符串型数据,再通过asc()将一个ASCII码字符转换为整型数据(0-255之间)。这样就解决了整型(0-255)和BLOB数据类型的相互转换问题,如图1所示。
  最后,所要解决的问题是控制字符(0x00)的存储问题。同许多高级语言不同,PB将字符看作字符串的特例,采用相同的处理机制。PB将0x00字符看作空字符串(0x00字符在PB中求得的长度是0个字节),而空字符在PB中是不记入字符串的长度的。这同大多数高级语言所求得的结果不同。以下给出VB、Delphi、PB三种语言中处于等价地位的代码来验证我们的说法:
  但当0x00字符在字符串中出现时,在0x00字符之后的字符串都将被PB忽略。例如,对于字符串"~hFF~h00~hFC",PB按"~hFF"来处理,转换为BLOB数据类型只能得到一个字节;对于"~hFF"+"~h00"+"~hFC",PB按"~hFF~hFC"处理,转换为BLOB数据类型只能得到两个字节。这样0x00的存储就存在问题。不过在PB中,可以通过指定BLOB数据类型的预分配空间来解决0x00的存储问题。例如,上述的字符串"~hFF~h00~hFC"可以通过下面的方法,被PB正确处理:
  这样就解决了控制字符(0x00)的存储问题。
  图1 整型数据(0-255)和BLOB数据类型的相互转换关系
  
  3 对PB BLOB数据类型位处理函数的封装
  在解决上面三个问题的基础上,我们实现了对位操作函数的封装,我们总共封装了9个函数,他们分别是:
  函数f_bittest()用于测试一个字节的BLOB数据类型的某一位是否为1;
  函数f_notblob()用于处理位操作的非操作;
  函数f_andblob()用于处理位操作的与操作;
  函数f_orblob()用于处理位操作的或操作;
  函数f_xorblob()用于处理位操作的异或操作;
  函数f_shlblob()用于处理位操作的左移操作;
  函数f_shrblob()用于处理位操作的右移操作;
  函数f_blob2ulg()用于正序或者逆序求出BLOB型数据对应的10进制;
  函数f_ulg2blob()用于正序或者逆序写入10进制对应的BLOB型数据。
  上述函数均是借助对整数的处理而间接实现的,由于版面有限,在本文中,我们只给出f_xorblob()实现的代码和例子:
  
  4 图像处理方面的应用
  图像处理是PB的一个薄弱环节,而借助上面封装的位处理函数可以实现PB在图像上的操作。以下给出一段程序代码,其程序代码的作用是将一段位图数据嵌入到一个位图文件的信息头,从而将该位图文件位图数据进行隐藏。我们所用到的图片是Bubbles.bmp图片(16色位图,位图大小是64x64,大小为2118字节),如图2所示;我们同样做了一个同样大小的图片(16色位图,位图大小是64x64),如图3所示,图片显示的内容作为我们的隐藏信息。
  图2 用于提取位图数据的图片(1.bmp) 图3 待隐藏的图片(2.bmp)
  以下给出将2.bmp隐藏在1.bmp 中具体实现的程序代码:
  该程序代码所生成的图片,在正常情况下所显示的效果同图2;当文件在Windows画图板中不经任何修改,再保存成新的文件,再在画图板中打开时,显示的效果同图3,即将隐藏信息显示出来了。
  
  5 工业控制领域的应用
  在工业控制领域经常要处理的信号是开关量信号,例如开关的闭合与断开,指示灯的亮与灭,继电器和接触器的吸合与释放,马达的启动与停止,阀门的打开与关闭等,这些信号都可以用二进制数据位表示。在大多数情况下,多个二进制数据位组成一个字节或字进行压缩存储,以节省存储空间。借助上面封装的位操作函数,可以对采集到(或存储)的二进制数据进行分析,并进行逻辑操作,从而实现PB对开关量信号的控制(或分析)。
  以下给出一段程序代码,用于说明上述位操作函数对开关信号量的控制,其中blobvar是采集到的一字节二进制状态信号。程序片断的功能是对blobvar的第7位进行测试(对于1个字节,从右到左分别是第0位到第7位),如果第7位为1,则对第6位进行置0,如果第7位为0,则将第6位置1。
  
  6 结语
  对PB位操作函数的封装,不但促进了PB在图像处理和工业控制领域的应用,而且也可应用于其它领域,从而提升了PB这一以数据库应用软件开发工具在其它领域的广泛适应性。
  参考文献:
  [1]袁梅宇.基于动态链接库进行BLOB数据交换的方法[J].微计算机应用,2000,21(3):242-244.
  [2]高毅龙,侯成刚.大数据块的存储与访问方案[J].计算机工程,1999,25(11):88-89.
  [3]于海生.微型计算机控制技术[M].北京:清华大学出版社,1999.18-21.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:文章从网络类型与传输速率对Authorware网络应用的影响、Authorware数据流技术、Authorware网络应用的系统结构等方面对基于web网络的Authorware程序设计思路进行了分析,并对Authorware程序在网络应用中的实现进行了探讨。  关键词:Authorware;数据流:网络课件  中图分类号:G431 文献标识码:B 文章編号:1009—3044(2007)08
期刊
摘要:在Flash中對时间的处理是通过其Date对象来实现。要在Flash中实现定时主要有两种方式:一种是用Date对象的getYear、getMonth、getDate、getHours、getMinutes、getSeconds等方法;另一种是单用Date对象的getTime方法。本文详细介绍了应用Date对象的getTime现定时的方法。  关键词:定时器;Date对象;电影剪辑;getTi
期刊
摘要:本文在研究了現有的ID3算法基础之上,设计了一个通用的ID3分类器,具有现实的意义。由于系统的可扩展性,为今后其他分类算法器的研究和设计提供了参考。  关键字:数据挖掘;分类分析;ID3;mdl  中图分类号:TP37 文献标识码:A 文章编号:1009—3044(2007)08—20543—01
期刊
摘要:虚拟校园的规模和应用水平是学校教学和科研综合实力的重要标志。本文根据虚拟校园的构建要求,采用虚拟现实模型语言对昆明理工大学校园场景进行了三维描述,阐述了三维空间的创建过程和多媒体的整合过程。  关键词:虚拟校园;VRML;场景  中图分類号:TP393 文献标识码:A 文章编号:1009—3044(2007)08—20402—01
期刊
摘要:本文对特效制作中常用的函数、属性、事件进行分析,并通过一个简单的实例来说明。重點介绍了ActionScript技术。  关键词:计算机教学;ActionScript;动画  中图分类号:TP311 文献标识码:A 文章编号:1009—3044(2007)08—20564—02
期刊
摘要:当前网络技术在教育中的应用日益廣泛和深入,特别是Internet与校园网的接轨,为教育提供了丰富的资源,使网络环境下的学习真正成为现实。本文阐述了Blog&Wiki在本科教学中应用的可行性分析,然后建立一个基于Blog&Wiki的开放协作式教学模型。  关键词:网络技术;Blog;Wiki;本科教育;开放协作式教学  中图分类号:TP393 文献标识码:A 文章编号:1009—3044(20
期刊
摘要:網络工程师考试是全国计算机技术与软件专业技术资格(水平)考试(简称水平考试)的中级考试的一种。本文分析了2006年11月的网络工程师考试上午试题的结构,并针对其中涉及的难点、重点进行解答,使考生在今后的复习中更有方向性和目的性。  关键词:网络工程师;结构分析;难点分析  中图分类号:G642 文献标识码:A 文章编号:1009—3044(2007)08—20567—01
期刊
摘要:在分析影响教学质量因素的基础上,对运用LMBP算法建立教学质量评估模型进行了研究,介绍了LMBP神经网络预测模型的计算过程及学习方法,建立了教学质量评估的LMBP预测模型,经测试数据验证,结果比较准确,能克服各种人为因素,具有广泛的适用性。  关键词:教学评估;LMBP算法;神经网络  中图分类号:TP37 文獻标识码:A 文章编号:1009—3044(2007)08—20519—03
期刊
摘要:weblog作为一种新兴的网络交流工具已经广泛地应用到众多行业和领域,其在教育中应用也必将产生新的学习方式,甚至是教育理念的变化。本文就weblog在网络课程教学中的应用作初步的探讨,以期探索网络课程教学中新的學习模式。  关键词:weblog;网络课程;教学;应用  中图分类号:TP393 文献标识码:A 文章编号:1009—3044(2007)08—20589—02
期刊
摘要:利用USB可以实现较传统方式更有效、更经济、点数更多的多点数据采集。针对基于USB接口和LabVIEW平台的数据采集和数据处理程序设计中,常遇到的典型应用中的问题如:基于TCP的网络传输、软件滤波、数组组合、波形振幅统计、超限报警等问题,本文给出了较详细的解决方案和实用程序设计技巧。  关键词:USB;LabVIEW;数据采集;技术  中图分类号:TP331文献标识码:A 文章编号:1009
期刊