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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于PB BLOB数据类型实现位操作

基于PB BLOB数据类型实现位操作   摘要:本文利用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型

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档