如何在PB中进行位操作以及二进制与十进制转换(摘录)

PB:Blob(大二进制对象)函数 如果n与length的和超过了data数据的字节数,那么BlobMid()函数返回剩下的数据,数据长度将小于参数length的值。用 法:如果在说明Blob类型的变量时指定了变量长度,那么对该变量来说,Len()函数得到的就是这个指定的长度。示 例:下面的代码把一幅位图的数据复制到Blob类型变量emp_photo的起始位置,并把下次数据复制位置保存到变量nbr中,之后将当天的日期复制到emp_photo变量中位图数据的后面。功 能:将任意类型的数据插入到Blob类型变量的指定位置。 阅读详情

原文:PFC

 

本文拟结合PFC中所提供的pfc_n_cst_numerical对象,讲解如何在PB脚本中实现位操作以及二进制与十进制相互转换。

 

(一)编写十进制转换成二进制的函数:

public function string of_binary (long al_decimal);integer  li_remainder

string  ls_binary=''

If IsNull(al_decimal) or al_decimal< 0 Then

    string ls_null

    SetNull(ls_null)

    Return ls_null

End If

If al_decimal = 0 Then

    Return '0'

End If

Do Until al_decimal= 0

    li_remainder = mod(al_decimal, 2)

    al_decimal = al_decimal /2

    ls_binary = string(li_remainder) + ls_binary

Loop

Return ls_binary

end function

 

(二)编写二进制转换成为十进制的函数:

public function long of_decimal (string as_binary);integer li_cnt

long        ll_len

char        lch_char[]

long        ll_decimal=0

If IsNull(as_binary) or Len(as_binary)<=0 then

    long ll_null

    SetNull(ll_null)   

    Return ll_null

End If

ll_len = Len(as_binary)

lch_char = as_binary

For li_cnt = 1 to ll_len

    If (Not lch_char[li_cnt]='1') AND (Not lch_char[li_cnt]='0') Then

        Return -1

    End If

    ll_decimal = ll_decimal + (long(lch_char[li_cnt]) * (2 ^ (ll_len - li_cnt)))

Next

Return ll_decimal

end function

 

(三)编写公用函数以逐位获取BIT位数据:

public function boolean of_getbit (long al_decimal, unsignedinteger ai_bit);Boolean lb_null

If IsNull(al_decimal) or IsNull(ai_bit) then

    SetNull(lb_null)

    Return lb_null

End If

If Int(Mod(al_decimal / (2 ^(ai_bit - 1)), 2)) > 0 Then

    Return True

End If

Return False

end function

 

(四)编写AND与操作函数:

public function long of_bitwiseand (long al_value1, long al_value2);Integer     li_Cnt

Long            ll_Result

Boolean     lb_Value1[32], lb_Value2[32]

If IsNull(al_Value1) Or IsNull(al_Value2) Then

    SetNull(ll_Result)

    Return ll_Result

End If

For li_Cnt = 1 To 32

    lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)

    lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)

Next

For li_Cnt = 1 To 32

    If lb_Value1[li_Cnt] And lb_Value2[li_Cnt] Then

        ll_Result = ll_Result + (2^(li_Cnt - 1))

    End If

Next

Return ll_Result

end function

 

(五)编写OR或操作函数:

public function long of_bitwiseor (long al_value1, long al_value2);Integer      li_Cnt

Long            ll_Result

Boolean     lb_Value1[32], lb_Value2[32]

If IsNull(al_Value1) Or IsNull(al_Value2) Then

    SetNull(ll_Result)

    Return ll_Result

End If

For li_Cnt = 1 To 32

    lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)

    lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)

Next

For li_Cnt = 1 To 32

    If lb_Value1[li_Cnt] Or lb_Value2[li_Cnt] Then

        ll_Result = ll_Result + (2^(li_Cnt - 1))

    End If

Next

Return ll_Result

end function

 

(六)编写XOR异或操作函数:

public function long of_bitwisexor (long al_value1, long al_value2);Integer     li_Cnt

Long            ll_Result

Boolean     lb_Value1[32], lb_Value2[32]

If IsNull(al_Value1) Or IsNull(al_Value2) Then

    SetNull(ll_Result)

    Return ll_Result

End If

For li_Cnt = 1 To 32

    lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)

    lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)

Next

For li_Cnt = 1 To 32

    If (lb_Value1[li_Cnt] And Not lb_Value2[li_Cnt]) Or &

        (Not lb_Value1[li_Cnt] And lb_Value2[li_Cnt]) Then

        ll_Result = ll_Result + (2^(li_Cnt - 1))

    End If

Next

Return ll_Result

end function

 

(七)编写NOT否操作函数:

public function long of_bitwisenot (long al_value);Integer      li_Cnt, li_Count

Long            ll_Result

string      ls_Value, ls_Result

If IsNull(al_Value) Then

    SetNull(ll_Result)

    Return ll_Result

End If

ls_Value = of_binary(al_Value)

li_Cnt = Len(ls_Value)

For li_Count = 1 To li_Cnt

    If Mid(ls_Value, li_Count, 1) = '0' Then

        ls_Result = ls_Result + '1'

    Else

        ls_Result = ls_Result + '0'

    End If

End For

Return of_decimal(ls_Result)   

end function

 

(八)调用上述函数:

//将十进制数10转换为二进制1010

ls_binary = of_binary(10)

//将二进制1010转换为十进制数10

ll_decimal = of_decimal(“1010”)

//执行AND与操作(55 && 44) = 36

ll_ret = of_bitwiseand(55,44) //返回36

//执行NOT否操作(! 55) = 8

ll_ret = of_bitwisenot(55) //返回8

//执行OR或操作(55 || 44) = 63

ll_ret = of_bitwiseor(55,44) //返回63

//执行XOR异或操作(55 XOR 44) = 27

ll_ret = of_bitwisexor(55,44) //返回27

 

 

至此本文结束。
PB进制转换函数(2-36进制任意转换) PB进制转换函数(2-36进制任意转换),可以实现2-36进制间任意转换。 立即下载

相关推荐

pb 十进制转换为十六

pb 十进制转换为十六 pb 十进制转换为十六 pb 十进制转换为十六

如何在PB中进行位操作以及二进制与十进制转换

一、编写十进制转换成二进制的函数 public function string of_binary (long al_decimal);integer li_remainder string ls_binary= If IsNull(al_decimal) or al_decimalstring ls_null SetNull(ls_null) Return ls_null End I

wljcom的专栏 2058

xor异或运算动态库

pb是自身是不带有XOR异或运算功能的,通过调用此动态库可以完成,有说明

位运算的相关操作

位运算的相关操作

weixin_54005982的博客 329

PB关于字符进制数转化及base64加密、解密,nvo_base64.sru

PB关于字符进制数转化及base64加密、解密 1、字符型十六进制数转为十进制数值 2、十进制数转为十六进制字符 3、base64加密 4、base64解密 5、将blob转为byte数组

pb数字进制间相互转化(源码).zip

pb数字进制间相互转化(源码) 1、十六进制转十进制 2、十进制转十六进制 3、二进制转十进制 4、二进制转十六进制 5、十六进制转二进制

PB实现进制转换

文章目录二进制8位二进制转byte二进制转十进制数二进制转十六进制bytebyte转8位二进制byte转2位十六进制十进制数十进制转二进制十进制转十六进制十六进制十六进制转二进制2位十六进制转byte十六进制转十进制源代码 二进制 8位二进制转byte 二进制转十进制数 二进制转十六进制 byte byte转8位二进制 byte转2位十六进制 十进制数 十进制转二进制 十进制转十六进制...

JasonFriday的博客 3619

PB字符串转化为十六进制并支持各进制间的转换源代码

打开下面链接,直接免费下载资源: https://renmaiwang.cn/s/n2sco 在IT行业中,字符串转换进制是一项基础且重要的任务,尤其在编程领域。PowerBuilder作为一款老牌的客户端/服务器应用程序开发工具,提供了丰富的功能,包括字符串处理和数据类型转换。本篇将详细介绍如何在PowerBuilder 9中进行字符串转十六进制以及不同进制之间的转换。在PowerBuilder中,我们可以使用内置的函数或者自定义函数来实现字符串到各种进制的转换。对于“pb字符串转十六进制”,我们通常会用到以下几种方法:1. **使用内置函数Hex()**: PowerBuilder中的`Hex()`函数可以把整数值转换为十六进制字符串。如果我们要对字符串的每个字符分别转换,需要先将字符串转换成字节序列,然后逐个应用`Hex()`函数。例如: ```pb string strInput = "HelloWorld" string strHexOutput integer i, len len = Len(strInput) for i = 1 to len strHexOutput += Hex(ASCII(Substring(strInput, i, 1))) next ``` 上述代码将字符串`strInput`的每个字符转换为ASCII值的十六进制表示,并连接成新的字符串`strHexOutput`。2. **自定义函数转换**: 如果需要更复杂的转换逻辑,如处理非ASCII字符或特殊格式,可以自定义函数。例如,可以创建一个函数`StringToHex()`,接收字符串作为输入,输出对应的十六进制表示。对于其他进制之间的转换,例如二进制、八进制、十进制和十六进制之间的转换,我们可以利用以下策略:1. **二进制与十进制**: - 二进制转十进制:使用`BinaryT

PB中二进制信息的存储

前言:在数据库的开发过程中,经常需要在数据库中存储一些备注信息,而这些备注信息的内容一般较大,格式多样-如有可能是语音文件、视频文件、图片文件、文本文件等,怎样在PB中实现这些格式不同的备注文件的存取及预览,一直是PB开发人员比较关心的一个问题,本文系统的介绍了三种存取备注二进制信息的方法。   对备注二进制信息的存储可以采用以下三种方式;  方法一:文件保存在固定的路径下,数据库中存取文件路

Lucker's PowerSpace 3921

关于AD中如何绘制原理图及其封装

AD中如何绘制原理图及其封装 题记:这是一个比较基础的知识,之所以我打算写一篇这样的笔记,主要是因为在日常生活中,我极少绘制特殊模块或芯片原理图及其封装。久而久之就忘记咋画了,有时需要画封装的时候又想不起来,网上的资料虽然一堆堆的,但往往只是仅原理图的绘制,或者是仅封装的绘制。为此我写一篇这样的笔记,记录绘制原理图及其封装的一条龙服务,感觉这对我而言尤为重要。 本文分为三大板块,依次是原理图的绘制、封装的绘制、二者的联立 第一板块——原理图的绘制 原理图的建立 第二板块——封装的绘制 第三板块——二者的

weixin_51130221的博客 7万+

别再为Word转PDF表格变形发愁了!Aspose.Words for Java 19.5 保姆级避坑指南

本文详细介绍了使用Aspose.Words for Java 19.5解决Word转PDF时表格变形问题的完整方案。从格式转换原理到实战技巧,涵盖固定表格宽度、禁用自动调整、强制文本换行等核心方法,并提供高级场景应对策略和性能优化建议,帮助开发者高效处理复杂文档转换需求。

weixin_28702105的博客 266

PB powerbuilder 进制转换 url 编码 解码 urlencode urldecode 数组排序

关键字: PBpowerbuilder进制转换url编码urlencodeurldecode数组排序环境:PB 12--powerbuilder 12一直想发出来共享一下:自己写的的用户对象,PB直接导入就可以用了,可能有bug,请大家一块学习函数(及参数) 作用decto 将十

xiajinxian的专栏 8747

顶会新宠!Gate+Attention创新思路发A会

性能提升:在Places2自然场景和CelebA-HQ人脸数据集上,与以往方法相比,该系统在自由形式掩码修复任务中取得了更高的质量和更低的误差(例如,平均ℓ1误差和ℓ2误差显著降低)。硬件效率提升:Griffin和Hawk在TPU-v3上的训练效率与Transformer相当,且在推理时具有更低的延迟和显著更高的吞吐量。门控卷积:提出了一种新的门控卷积机制,通过学习每个通道在每个空间位置的动态特征选择机制,解决了传统卷积将所有输入像素视为有效像素的问题。

2501_92785035的博客 974

位运算----奇思妙想(一)

关于二进制位运算的原理性介绍,很多入门级的c语言书籍或者博客上都已经介绍得非常详细。本文不打算从入门原理重走老路,准备从应用角度出发,持续性介绍关于二进制位运算在实际应用中的巧妙性,给自己的学习作一个记录,同时也分享给爱好编程的朋友,一起交流分享。本文将主要介绍关于二进制位运算在图像处理算法等基础算法方面的巧妙应用,希望同样有巧妙应用的你,将你的奇思妙想留言到本文结尾,当然更希望能直接的与你一起探

pbImage的专栏 1500

手把手教你用Microsoft AEC Challenge数据集训练自己的回声消除模型(附完整代码)

本文详细介绍了如何使用Microsoft AEC Challenge数据集训练专业的回声消除模型,包括环境准备、数据清洗、模型架构设计、训练流程和实际部署注意事项。通过完整的代码示例和实战指南,帮助开发者快速掌握AEC技术,提升语音通信系统的回声消除效果。

weixin_27697385的博客 456

Codex入门24-效率倍增秘籍(终极总结:10个让你开发速度翻倍的Codex高级技巧)

专栏收官之作!经过前23篇的系统学习,你已经掌握了 Codex CLI 的核心用法。本文浓缩10个实战验证的高级技巧:管道化提示词将复杂任务拆成递进指令链,模板化 SKILL.md 打造个人技能库,Shell 别名让操作快如闪电,多模型切换省钱又高效……这不是理论课,每个技巧都配有可直接运行的代码。掌握全部10招,构建你的 AI 开发工作流闭环,让开发速度真正翻倍!

yueyeguzhuo的专栏 189

PB中位操作的实现代码

(三)编写公用函数以逐位获取BIT位数据: public function boolean of_getbit (long al_decimal, unsignedinteger ai_bit);Boolean...

cn889002的博客 378

生信分析进阶14 - 从GTF文件提取基因、转录本、TSS和TSE

从GTF文件提取基因、转录本、TSS和TSE

LittleComputerRobot的博客 677

MD5算法在PB中的实现

MD5算法自从1991开发出来以后广泛用于数字签名和加密解密领域。目前使用PB外的语言可以较为简单地实现了MD5加密,使用PB来实现的比较鲜见,这可能有如下两方面的原因:一,PB在位运算方面未提供直接使用的函数,要实现位运算比较麻烦;二,在PB(PB10之前的版本)中无法直接获取字符的unicode值。如果能够攻破这两个难点,在熟悉MD5算法之后应该比较容易地在PB中实现MD5加密。   PB虽然

lzp_lrp的专栏 5259

GD32F103 -- LIN从机通讯 -- 程序代码 (精简版)

注意!!!注意!!!这是GD32从机通讯!!!GD32!!!GD32!!!

晴朗luo的博客 2498

ICP-10111气压传感器原理图设计,已量产(压力传感器)

在最近的室内导航定位项目中,我们需要一款能捕捉厘米级垂直高度变化的气压传感器 —— 毕竟室内环境里,哪怕是单个台阶的高度差都得精准识别。对比了几款器件后,最终选定了 ICP-10111:它 ±1Pa 的压差精度刚好能把高度差分辨到 8.5cm,0.4Pa 的低压力噪声能让数据输出足够稳定,再加上 0.5Pa/℃的低温漂特性,长期工作的可靠性也能满足需求。下面聊聊这套适配 ICP-10111 的硬件电路设计细节。

不脱发的程序猿 333

位运算符及位字段

1.位运算符 按位取反~ 将所有二进制位按位取反 例如:0000 0000 0000 1101 按位取反:1111 1111 1111 0010 2.按位与& 两个数的二进制位都为1,则相与后为1,否则为0 (1111 0000 1111 0000) & (0101 1010 0101 1101) 结果:0101 0000 0101 0000 3.按位或| 两个数二进制位有一个为1,则为1,否则为0 (0101 1010 0101 1010) | (1010 0101 1010 0101)

qq_55047476的博客 609

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: 如何在PB脚本当中获取存储过程的返回值(翻译)
下一篇: 如何在PB中调用F1控件如何插入图片(原创)
balloonman2002
博客等级 码龄24年 115粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值