前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

PowerBuilder数制转换_不败八神_新浪博客 加载中… 不败八神的博客 http://blog.sina.com.cn/fightingiori [订阅][手机订阅] 首页 博文目录 图片 关于我 个人资料 不败八神 Qing 微博 加好友 发纸条 写留言 加关注 博客等级: 博客积分:36 博客访问:2,029 关注人气:8 天天美食 精彩图文 相关博文 更多>> 推荐博文 李娜夺冠感言为何不谈爱国也动人 罗庆学 第1058篇&bull;大院 马未都 中国建5艘航母撑起“世界第二” 军事记者东旭 请给穷人留一趟绿皮车 信海光 “老年福利”背后的真正意义 东方卫视评论员骆新 对速算,随便写几句吧 破破的桥 “阿拉伯之春”三年记 博联社马晓霖 我不是他爹,哥们就别坑我了 易中天 “游”在日本:大阪美食之“夫妇 辛子IN日本 安倍的真心话还是大冒险 偶尔一笔 查看更多>> 谁看过这篇博文 加载中… 正文 字体大小:大 中 小 PowerBuilder数制转换 (2011-08-17 17:16:46) 标签: it 分类: PowerBuilder 进制转换是算法编程中常用的技术,特别是设计串口和通讯方面。PB没有提供直接的进制转换函数,如果程序中需要进行进制转换,可以自己编写处理函数调用。 本文提供一种实现方法,原理非常简单,并已封装成用户对象。 实现过程如下 1、建立一个工作空间(workspace),取名为:numberconvert。 2、建立一个应用(application),取名为:numberconvert。 3、建立一个标准的不可视用户对象,取名为:nvo_number_convert。 4、定义用户对象级函数uf_Other2Binary()。该函数可将其他进制数转换为二进制数,函数定义如下: //-----------------------------------------------------------------// // 函数名称: uf_Other2Binary // 功能描述: 其它进制数转换为二进制数 // 作用范围: Public // 参数说明: as_num:要转换的数值 // ai_type:原进制类型 // 返 回 值: 转换后的二进制数值 // 使用举例: uf_Other2Binary('255', 10) // 为将十进制数255转换为2进制数 //-----------------------------------------------------------------// integer li_i long ll_num string ls_rtn //根据目标进制的不同做不同处理 Choose Case ai_type Case 2 //二进制 ls_rtn = as_num Case 8 //八进制 For li_i= 1 To len(as_num) choose Case mid(as_num, li_i, 1) Case "0" ls_rtn = ls_rtn + "000" Case "1" ls_rtn = ls_rtn + "001" Case "2" ls_rtn = ls_rtn + "010" Case "3" ls_rtn = ls_rtn + "011" Case "4" ls_rtn = ls_rtn + "100" Case "5" ls_rtn = ls_rtn + "101" Case "6" ls_rtn = ls_rtn + "110" Case "7" ls_rtn = ls_rtn + "111" End choose next Case 10 //十进制 li_i = long(as_num) Do while li_i >= 1 ls_rtn = string(mod(li_i, 2)) + ls_rtn li_i = (li_i - mod(li_i, 2)) / 2 Loop Case 16 //十六进制 For li_i= 1 to len(as_num) choose Case mid(as_num, li_i, 1) Case "0" ls_rtn = ls_rtn + "0000" Case "1" ls_rtn = ls_rtn + "0001" Case "2" ls_rtn = ls_rtn + "0010" Case "3" ls_rtn = ls_rtn + "0011" Case "4" ls_rtn = ls_rtn + "0100" Case "5" ls_rtn = ls_rtn + "0101" Case "6" ls_rtn = ls_rtn + "0110" Case "7" ls_rtn = ls_rtn + "0111" Case "8" ls_rtn = ls_rtn + "1000" Case "9" ls_rtn = ls_rtn + "1001" Case "a", "A" ls_rtn = ls_rtn + "1010" Case "b", "B" ls_rtn = ls_rtn + "1011" Case "c", "C" ls_rtn = ls_rtn + "1100" Case "d", "D" ls_rtn = ls_rtn + "1101" Case "e", "E" ls_rtn = ls_rtn + "1110" Case "f", "F" ls_rtn = ls_rtn + "1111" End Choose Next Case Else ls_rtn = as_num MessageBox('提示信息', '不正确的进制参数!') End Choose Return ls_rtn 5、定义用户对象级函数uf_Binary2Other()。该函数可将二进制数转换为其他进制数,函数定义如下: //-----------------------------------------------------------------// // 函数名称: uf_Binary2Other // 功能描述: 二进制数转换为其它进制数 // 作用范围: Public // 参数说明: as_num:二进制数值 // ai_type:目标进制类型 // 返 回 值: 目标进制数值 // 使用举例: uf_binary2other('1011', 10) // 为将二进制数1011转换为10进制数 //-----------------------------------------------------------------// integer li_i long ll_num string ls_rtn //根据目标进制的不同做不同处理 Choose Case ai_type Case 2 //二进制 ls_rtn = as_num Case 8 //八进制 //补0 Do while mod(len(as_num), 3) <> 0 as_num = "0" + as_num Loop For li_i = 1 to len(as_num) Step 3 ll_num = long(mid(as_num, li_i, 1)) * 4 + & long(mid(as_num, li_i+1, 1)) * 2 + long(mid(as_num, li_i+2, 1)) ls_rtn = ls_rtn + string(ll_num) Next Case 10 //十进制 For li_i=1 to len(as_num) IF mid(as_num, li_i, 1) = "0" then ll_num = ll_num * 2 else ll_num = ll_num * 2 + 1 end if next ls_rtn = string(ll_num) Case 16 //十六进制 //补0 do while mod(len(as_num), 4) <>0 as_num = "0" + as_num loop For li_i = 1 to len(as_num) step 4 Choose Case mid(as_num, li_i, 4) Case "0000" ls_rtn = ls_rtn + "0" Case "0001" ls_rtn = ls_rtn + "1" Case "0010" ls_rtn = ls_rtn + "2" Case "0011" ls_rtn = ls_rtn + "3" Case "0100" ls_rtn = ls_rtn + "4" Case "0101" ls_rtn = ls_rtn + "5" Case "0110" ls_rtn = ls_rtn + "6" Case "0111" ls_rtn = ls_rtn + "7" Case "1000" ls_rtn = ls_rtn + "8" Case "1001" ls_rtn = ls_rtn + "9" Case "1010" ls_rtn = ls_rtn + "A" Case "1011" ls_rtn = ls_rtn + "B" Case "1100" ls_rtn = ls_rtn + "C" Case "1101" ls_rtn = ls_rtn + "D" Case "1110" ls_rtn = ls_rtn + "E" Case "1111" ls_rtn = ls_rtn + "F" End Choose Next Case Else ls_rtn = as_num MessageBox('提示信息', '不正确的进制参数!') End Choose Return ls_rtn 6、定义用户对象级函数uf_Number_Convert()。该函数可完成任意进制数之间转换,函数定义如下: //-----------------------------------------------------------------// // 函数名称: uf_Number_Convert // 功能描述: 进制转换 // 作用范围: Public // 参数说明: as_num:要转换的数值 // ai_type1:源进制类型 // ai_type2:目标进制类型 // 返 回 值: 转换后数值 // 使用举例: uf_Number_Convert('1010', 2, 10) // 为将2进制数1010转换为10进制数 //-----------------------------------------------------------------// String ls_rtn String ls_temp //根据目标进制处理 Choose Case ai_type2 Case 2 //目标进制为2进制 //其它进制转换为2进制 ls_rtn = uf_Other2Binary(as_num, ai_type1) Case 8 //目标进制为8进制 CHoose Case ai_type1 //根据源进制处理 Case 2 //2进制--> 8进制 ls_rtn = uf_Binary2Other(as_num, 8) //2->8 Case 8 //8进制--> 8进制 ls_rtn = as_num Case 10,16 //10或16进制--> 8进制 ls_temp = uf_Other2Binary(as_num, ai_type1) //10或16->2 ls_rtn = uf_Binary2Other(ls_temp, 8) //2->8 End CHoose Case 10 CHoose Case ai_type1 //根据源进制处理 Case 2 //2进制--> 10进制 ls_rtn = uf_Binary2Other(as_num, 10) //2->10 Case 8,16 //8或16进制--> 10进制 ls_temp = uf_Other2Binary(as_num, ai_type1) //8或16->2 ls_rtn = uf_Binary2Other(ls_temp, 10) //2->10 Case 10 //10进制--> 10进制 ls_rtn = as_num End CHoose Case 16 //目标进制为16进制 CHoose Case ai_type1 //根据源进制处理 Case 2 //2进制--> 16进制 ls_rtn = uf_Binary2Other(as_num, 16) //2->16 Case 8,10 //8或10进制--> 16进制 ls_temp = uf_Other2Binary(as_num, ai_type1) //8或10->2 ls_rtn = uf_Binary2Other(ls_temp, 16) //2->16 Case 16 //16进制--> 16进制 ls_rtn = as_num End CHoose End Choose Return ls_rtn //--------------------------------------------------------------- //函数也可以写成: String ls_rtn String ls_temp //源进制数值转换为二进制中间数 ls_temp = uf_Other2Binary(as_num, ai_type1) //二进制中间数转换目标进制 ls_rtn = uf_Binary2Other(ls_temp, ai_type2) Return ls_rtn 分享: 喜欢 阅读┊ 评论 ┊ 收藏 ┊禁止转载 ┊ 喜欢▼ ┊打印┊举报 已投稿到: 排行榜 加载中,请稍候...... 前一篇:[Sybase] 数据库学习 后一篇:获取版本号 评论 重要提示:警惕虚假中奖信息 | [发评论] 评论加载中,请稍候... 发评论 | 登录名: 密码: 找回密码 注册 记住登录状态昵 称: 分享到微博 验证码: 请点击后输入验证码 收听验证码 匿名评论 发评论 以上网友发言只代表其个人观点,不代表新浪网的观点或立场。 < 前一篇[Sybase] 数据库学习 后一篇 >获取版本号 新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正 新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑 Copyright &copy; 1996 - 2014 SINA Corporation, All Rights Reserved 新浪公司 版权所有